首页 > web前端 > css教程 > 幻影的视觉回归测试

幻影的视觉回归测试

Lisa Kudrow
发布: 2025-02-21 08:24:11
原创
850 人浏览过

幻影的视觉回归测试

钥匙要点

    Phantomcss是一个Node.js工具,可执行视觉回归测试,这是一种自动测试的形式,该形式检查网页元素是否按预期出现。它通过获取页​​面或特定元素的屏幕截图,将其与存储的基线图像进行比较,并在屏幕截图不匹配的情况下创建差异的图像。
  • >。 Phantomcss建立在多个组件上,包括用于与Phantomcss或Slimerjs浏览器,Phantomjs 2或Slimerjs相互作用的Casperjs,作为无头浏览器,并相似于比较图像的js。
  • 使用phantomcss,以node.js脚本的形式创建了一个测试套件。测试套件打开所需的页面,进行屏幕截图,并将它们与上一步的图像进行比较。如果对网站进行更改,则可以再次进行测试以将新屏幕截图与原始屏幕截图进行比较。
  • 如果在测试中检测到视觉变化,则幻影突出显示了已更改的区域。要接受这些更改,可以使用其他–rebase参数运行测试命令。这用新的基线图像替换为新的基线图像。
  • 如果您在职业生涯中做出了任何认真的发展,那么当您意识到开发过程中自动测试的重要性时,您可能已经达到了一点。根据您的经验,这种认识可能会在一个大爆发中袭击您,或者随着时间的流逝,它可能会轻轻地来到您身边,但最终将成为第二天性。自动测试有多种形式,从单元测试,测试隔离的代码,集成和功能测试时,当您测试系统的不同部分如何共同行为时。本文一般不是关于自动测试的概述。它是关于一个特定的和一个相对较新的利基,称为
  • 视觉回归测试

>视觉回归测试采用另一种方法来测试网页。该测试不仅要确保DOM中存在某些元素或文本值,还可以打开页面,并检查此特定块是否看起来完全像您希望它到

>。只是为了确保您获得了差异,让我给您一个例子。想象一下,您希望您的网站向访问者打招呼:

<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
登录后复制
登录后复制
登录后复制
为了确保它有效,您可以(并且应该)单位测试产生消息的代码,以检查其插入正确的名称。您还可以使用硒或量角器编写功能测试,以查看该元素是否实际上在页面上使用正确的文本存在。但这还不够。我们不仅要测试文本是正确生成的或出现在DOM中的文本,还要确保整个元素

>正确,即确保元素不会被显示:无或有人并没有意外地覆盖文本的颜色。有许多工具可以做到这一点,但是今天我们将特别研究一个选项 - 幻影。

什么是phantomcss?

Phantomcss是一种进行视觉回归测试的node.js工具。它是开源的,由赫德尔的家伙开发。 Phantomcss允许您运行一个无头浏览器,打开页面并在页面上进行整个页面或特定元素的屏幕截图。此屏幕截图将作为基线图像存储,以供将来参考。每当您更改网站上的任何内容时,都可以再次运行Phantomcss。它将采用另一个屏幕截图并将其与原始图像进行比较。如果找不到差异,则测试将通过。但是,如果屏幕截图不匹配,测试将失败,并且将创建差异的新图像供您查看。这种方法使该工具非常适合测试CSS的更改。

Phantomcss构建在几个关键组件的顶部:>

casperjs - 一种与Phantomcss或Slimerjs浏览器进行交互的工具。它允许您打开页面并执行用户交互,例如单击按钮或输入值。此外,Casperjs提供了自己的测试框架和捕获页面屏幕截图的能力。

Phantomjs 2或Slimerjs - 两个不同的无头浏览器,两种无头浏览器都可以与Phantomcs一起使用。无头浏览器就像没有用户界面的普通浏览器一样。

    >类似于js - 用于比较图像的库。
  • phantomcss可以与phantomjs和slimerjs一起使用,但是在本文中,我们将使用phantomjs。
  • 让我们旋转
  • >让我们设置一个小型测试项目,以了解如何在实践中使用此工具。为此,我们将需要一个网页来测试和一个简单的node.js Web服务器,以便Casperjs可以打开页面。
>

设置测试项目

>创建一个带有一些示例内容的index.html文件:

>

>要安装Web服务器,初始化NPM项目并安装HTTP-Server软件包。

运行服务器,让我们定义一个简单的NPM脚本。只需将以下脚本部分添加到package.json

<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
登录后复制
登录后复制
登录后复制

>现在您可以从项目文件夹中运行NPM启动,并且索引页将在默认地址http://127.0.0.1:8080上访问。启动服务器,现在让它运行。我们将在一段时间内需要它。

>安装Phantomcss

>安装Phantomcss很容易,您需要做的就是在项目中添加一些依赖项:>

<span><span><!doctype html></span>
</span><span><span><span><html</span>></span>
</span>  <span><span><span><head</span>></span>
</span>    <span><span><span><style</span>></span><span>
</span></span><span><span>      <span><span>.tag</span> {
</span></span></span><span><span>        <span>color: #fff;
</span></span></span><span><span>        <span>font-size: 30px;
</span></span></span><span><span>        <span>border-radius: 10px;
</span></span></span><span><span>        <span>padding: 10px;
</span></span></span><span><span>        <span>margin: 10px;
</span></span></span><span><span>        <span>width: 500px;
</span></span></span><span><span>      <span>}
</span></span></span><span><span>
</span></span><span><span>      <span><span>.tag-first</span> {
</span></span></span><span><span>        <span>background: lightcoral;
</span></span></span><span><span>      <span>}
</span></span></span><span><span>
</span></span><span><span>      <span><span>.tag-second</span> {
</span></span></span><span><span>        <span>background: lightskyblue;
</span></span></span><span><span>      <span>}
</span></span></span><span><span>    </span><span><span></style</span>></span>
</span>  <span><span><span></head</span>></span>
</span>
  <span><span><span><body</span>></span>
</span>    <span><span><span><div</span> class<span>="tag tag-first"</span>></span>The moving finger writes, and having written moves on.<span><span></div</span>></span>
</span>    <span><span><span><div</span> class<span>="tag tag-second"</span>></span>Nor all thy piety nor all thy wit, can cancel half a line of it.<span><span></div</span>></span>
</span>  <span><span><span></body</span>></span>
</span><span><span><span></html</span>></span></span>
登录后复制
创建一个测试套件

>现在,我们拥有建立第一个测试套件所需的一切。 Phantomcss测试套件是以Node.js脚本的形式创建的,您可以在其中打开网站所需的页面,进行屏幕截图并将其与上一步中的图像进行比较。我们从基于Phantomcss本身的演示的简单测试案例开始。

>

<span>npm init
</span><span>npm install http-server --save-dev</span>
登录后复制
测试将打开http://127.0.0.1:8080/,请屏幕截图,并将其保存在屏幕截图/body.png。

>一旦我们将测试本身就位,剩下的就是定义脚本以运行测试。让我们将以下脚本添加到package。

>您现在可以通过执行以下命令来运行它:

>
<span>"scripts": {
</span>  <span>"start": "http-server"
</span><span>},</span>
登录后复制

您将看到的输出应该看起来像这样:

<span>npm install phantomcss casperjs phantomjs-prebuilt --save-dev</span>
登录后复制

>由于您是第一次进行测试,因此它将创建一个新的基线屏幕截图,并且不会进行任何比较。继续前进,窥视屏幕截图文件夹。您应该看到这样的图像:

<span>var phantomcss = require('phantomcss');
</span>
<span>// start a casper test
</span>casper<span>.test.begin('Tags', function(test) {
</span>
  phantomcss<span>.init({
</span>    <span>rebase: casper.cli.get('rebase')
</span>  <span>});
</span>
  <span>// open page
</span>  casper<span>.start('http://127.0.0.1:8080/');
</span>
  <span>// set your preferred view port size
</span>  casper<span>.viewport(1024, 768);
</span>
  casper<span>.then(function() {
</span>      <span>// take the screenshot of the whole body element and save it under "body.png". The first parameter is actually a CSS selector
</span>      phantomcss<span>.screenshot('body', 'body');
</span>  <span>});
</span>
  casper<span>.then(function now_check_the_screenshots() {
</span>    <span>// compare screenshots
</span>    phantomcss<span>.compareAll();
</span>  <span>});
</span>
  <span>// run tests
</span>  casper<span>.run(function() {
</span>    <span>console.log('\nTHE END.');
</span>    casper<span>.test.done();
</span>  <span>});
</span><span>});</span>
登录后复制

>这是您的网站应该如何外观的黄金标准,并且测试的未来执行将将其结果与此图像进行比较。

幻影的视觉回归测试引入回归

如果您再次运行相同的测试命令,它将报告所有测试已成功传递:>

>这是可以预期的,因为我们没有在网站上更改任何内容。让我们打破一些东西,再次重新进行测试。例如,尝试在index.html中更改一些样式,将块的大小降低到400px。现在让我们再次进行测试,看看会发生什么:

>

<span>"test": "casperjs test test.js"</span>
登录后复制
在这里发生了一些重要的事情。首先,Phantomcss报告说,由于屏幕截图Body_0.png的不匹配,测试失败了。不匹配为11.41%。其次,当前版本和上一个版本之间的差异保存在“故障文件夹”中。如果打开它,您会看到这样的屏幕截图:

>

<span>npm test</span>
登录后复制
屏幕截图方便地突出了已更改的区域,因此很容易发现差异。

接受更改

>现在已经强调了差异,我们该怎么做才能接受更改?我们应该以某种方式能够告诉该工具我们要坚持使用块的宽度减小,并接受当前视图作为新标准。为此,您可以使用附加的 - rebase参数运行test命令:

<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
登录后复制
登录后复制
登录后复制
请注意两个双重破折号。这是NPM将参数传递到基础命令的方式。因此,以下命令将导致casperjs test.js -rebase。既然我们已经接受了更改,则将以新的基线图像替换为新的图像。

>

进一步

>现在您已经掌握了基础知识,您可以开始考虑将此工具集成到自己的工作流程中。我不会详细介绍它,因为它特定于项目,但是这里有一些问题要思考:>

>您是否要针对真实网站或某种样式指南进行测试,其中只有单独的UI元素?
    >
  • 您的网站有动态内容吗?如果是,那么内容的更改将导致测试破裂。为了避免这种情况,您需要设置一个具有静态上下文的网站的单独版本,以对其进行测试。
  • 您是否要将屏幕截图添加到版本控件中?是的,你应该。
  • 您要拍摄整个页面的屏幕截图还是单独的元素?
  • >
  • >使用此工具,您现在可以通过自动测试来介绍网站的视觉方面。有了您的单元和功能测试,这种新策略将填补您的测试前沿中的狭窄空白。即使您仍然是测试的新手 - 这是一个很好的起点!
>

经常询问的问题(常见问题解答)有关使用幻影测试的视觉回归测试

什么是phantomcss,它如何工作?

>如何使用幻象来进行视觉回归测试?>使用phantomcss进行视觉回归测试,您首先需要创建一个测试脚本,该测试脚本告诉Phantomcss可以捕获什么屏幕截图。该脚本可以用JavaScript或CoffeeScript编写。脚本准备就绪后,您可以使用phantomjs运行它。然后,Phantomcss将捕获指定元素的屏幕截图,将它们与基线图像进行比较,并生成一个报告显示差异的报告。

>

>我可以将phantomcss与其他测试框架一起使用吗?与其他测试框架(如摩卡咖啡,茉莉花和Qunit)一起使用。它也可以与詹金斯(Jenkins)和特拉维斯(Travis)CI等连续集成系统进行集成。

将使用phantomcss进行视觉回归测试的优点是什么?

phantomcss为视觉回归测试提供了几种优势。它可以自动捕获和比较屏幕截图的过程,从而节省了大量时间。它还提供了一个视觉报告,使得可以轻松发现基线图像和测试图像之间的差异。此外,Phantomcss支持响应式设计测试,使开发人员可以在不同的屏幕尺寸上测试其网页。

>我如何在phantomcss中调试测试?

>我可以自定义phantomcss中的比较过程吗?>

> phantomcss的视觉回归测试的替代方法是什么?

>有几种替代方法可用于phantomcss for Phantomcss for视觉回归测试,包括Backstopjs,Wraith和Gemini。这些工具提供了与幻影相似的功能,但根据您的特定需求,它们可能具有不同的优势和劣势。

以上是幻影的视觉回归测试的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板