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

幻影的视觉回归测试

钥匙要点

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

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

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

<span><span><span><div>>Hello, %username%!<span><span></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>>Hello, %username%!<span><span></span></span>
</div></span>></span></span>

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

>安装Phantomcss

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

<span><span>
</span><span><span><span>></span>
</span>  <span><span><span>></span>
</span>    <span><span><span><style>></style></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></span>></span>
</span>  <span><span><span></span>></span>
</span>
  <span><span><span>></span>
</span>    <span><span><span><div> class<span>="tag tag-first"</span>>The moving finger writes, and having written moves on.<span><span></span></span>
</div></span>></span>
</span>    <span><span><span><div> class<span>="tag tag-second"</span>>Nor all thy piety nor all thy wit, can cancel half a line of it.<span><span></span></span>
</div></span>></span>
</span>  <span><span><span></span>></span>
</span><span><span><span></span>></span></span></span></span></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>>Hello, %username%!<span><span></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
光标的下一个CSS样式光标的下一个CSS样式Apr 23, 2025 am 11:04 AM

具有CSS的自定义光标很棒,但是我们可以将JavaScript提升到一个新的水平。使用JavaScript,我们可以在光标状态之间过渡,将动态文本放置在光标中,应用复杂的动画并应用过滤器。

世界碰撞:使用样式查询的钥匙帧碰撞检测世界碰撞:使用样式查询的钥匙帧碰撞检测Apr 23, 2025 am 10:42 AM

互动CSS动画和元素相互启动的元素在2025年似乎更合理。虽然不需要在CSS中实施乒乓球,但CSS的灵活性和力量的增加,可以怀疑Lee&Aver Lee&Aver Lee有一天将是一场

使用CSS背景过滤器进行UI效果使用CSS背景过滤器进行UI效果Apr 23, 2025 am 10:20 AM

有关利用CSS背景滤波器属性来样式用户界面的提示和技巧。您将学习如何在多个元素之间进行背景过滤器,并将它们与其他CSS图形效果集成在一起以创建精心设计的设计。

微笑吗?微笑吗?Apr 23, 2025 am 09:57 AM

好吧,事实证明,SVG的内置动画功能从未按计划进行弃用。当然,CSS和JavaScript具有承载负载的能力,但是很高兴知道Smil并没有像以前那样死在水中

'漂亮”在情人眼中'漂亮”在情人眼中Apr 23, 2025 am 09:40 AM

是的,让#039;跳上文字包装:Safari Technology Preview In Pretty Landing!但是请注意,它与在铬浏览器中的工作方式不同。

CSS-tricks编年史XLIIICSS-tricks编年史XLIIIApr 23, 2025 am 09:35 AM

此CSS-tricks更新了,重点介绍了年鉴,最近的播客出现,新的CSS计数器指南以及增加了几位新作者,这些新作者贡献了有价值的内容。

tailwind的@Apply功能比听起来更好tailwind的@Apply功能比听起来更好Apr 23, 2025 am 09:23 AM

在大多数情况下,人们展示了@Apply的@Apply功能,其中包括Tailwind的单个property实用程序之一(会改变单个CSS声明)。当以这种方式展示时,@Apply听起来似乎很有希望。如此明显

感觉就像我没有释放:走向理智的旅程感觉就像我没有释放:走向理智的旅程Apr 23, 2025 am 09:19 AM

像白痴一样部署的部署归结为您部署的工具与降低复杂性与添加的复杂性之间的奖励之间的不匹配。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!