ホームページ >ウェブフロントエンド >CSSチュートリアル >Phantomcssによる視覚回帰テスト
視覚回帰テストは、Webページをテストするための代替アプローチを取ります。要素またはテキスト値がDOMに存在することを確認する代わりに、テストが実際にページを開き、この特定のブロックがに望んでいるように見えるかどうかを確認します。違いを確認するために、例を挙げてみましょう。あなたのウェブサイトに友好的なメッセージであなたの訪問者に挨拶することを想像 それが機能することを確認するために、メッセージを生成するコードを単位テストすることができます(そして必要です)。正しい名前を挿入することを確認します。また、SeleniumまたはProtractorを使用して機能的なテストを作成して、正しいテキストで要素が実際にページに存在するかどうかを確認することもできます。しかし、これで十分ではありません。テキストが正しく生成されたり、DOMに表示されたりするだけでなく、要素全体が正しいように見えることを確認する必要があります。誰かがテキストの色を誤ってオーバーライドしていません。それを行うための多くのツールがありますが、今日は特に1つのオプションを検討します。
phantomcssとは?
Phantomjs 2またはSlimerjs - 2つの異なるヘッドレスブラウザー。どちらもPhantomCSで使用できます。ヘッドレスブラウザは、ユーザーインターフェイスのない通常のブラウザのようなものです。
Webサーバーをインストールするには、NPMプロジェクトの初期化を行い、HTTP-Serverパッケージをインストールします。
プロジェクトフォルダーからnpm開始を実行でき、インデックスページはデフォルトのアドレスhttp://127.0.0.1:8080でアクセスできます。サーバーを起動し、今のところ実行したままにします。しばらくする必要があります。 phantomcssのインストールは簡単です。プロジェクトにいくつかの依存関係を追加するだけです。
これは、ウェブサイトで何も変更していないため予想されることです。何かを壊して、テストをもう一度再実行しましょう。たとえば、index.htmlのスタイルを変更してみてください。たとえば、ブロックのサイズを400pxに減らしてください。次に、テストをもう一度実行して、何が起こるか見てみましょう:
違いが強調されたので、変化を受け入れるにはどうすればよいですか?ブロックの幅の減少に固執し、現在のビューを新しい標準として受け入れたいことをツールに伝えることができるはずです。それを行うには、追加でテストコマンドを実行できます - rebase引数: 2つのダブルダッシュに注意してください。これは、パラメーターを基礎となるコマンドに渡すNPMの方法です。したがって、次のコマンドにより、Casperjs Test test.js -Rebaseが作成されます。この変更を受け入れたので、以前のベースライン画像は新しいものに置き換えられます。
視覚回帰テストには、Phantomcssを使用するには、最初にPhantomCSSにスクリーンショットをキャプチャするものを伝えるテストスクリプトを作成する必要があります。このスクリプトは、javaScriptまたはcoffeescriptで書くことができます。スクリプトの準備ができたら、Phantomjsを使用して実行できます。 PhantomCSSは、指定された要素のスクリーンショットをキャプチャし、それらをベースライン画像と比較し、違いを示すレポートを生成します。 Mocha、Jasmine、Qunitなど、他のテストフレームワークと一緒に使用してください。また、JenkinsやTravis CIなどの継続的な統合システムと統合することもできます。スクリーンショットをキャプチャして比較するプロセスを自動化し、開発者に多くの時間を節約できます。また、ベースラインとテスト画像の違いを簡単に見つけることができる視覚レポートを提供します。さらに、PhantomCSSはレスポンシブデザインテストをサポートしているため、開発者がさまざまな画面サイズでWebページをテストできるようにします。古いベースライン画像を削除して、テストスクリプトを再度実行するだけです。 PhantomCSS will capture new screenshots and use them as the new baseline images. Yes, PhantomCSS can handle dynamic content.これにより、開発者はスクリーンショットをキャプチャする前に遅延を指定し、動的なコンテンツに十分な時間を与えることができます。 It also supports the use of callbacks to wait for specific events before capturing screenshots. PhantomCSS provides several options for debugging tests.メッセージをコンソールにログに記録し、失敗したテストを画像ファイルとして保存し、テスト実行のビデオを作成することもできます。 These features make it easier to identify and fix issues in your tests. Yes, PhantomCSS allows you to customize the comparison process.比較タイプ、不一致の許容範囲、および出力設定を設定できます。 This gives you more control over the comparison process and allows you to tailor it to your specific needs. There are several alternatives to PhantomCSS for Backstopjs、Wraith、Geminiを含む視覚回帰テスト。これらのツールは、PhantomCSと同様の機能を提供しますが、特定のニーズに応じて、さまざまな長所と短所がある場合があります。<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
Phantomcssは、いくつかの主要なコンポーネントの上に構築されています:
semble.js - 画像を比較するためのライブラリ。
テストプロジェクトのセットアップ
サーバーを実行するには、簡単なNPMスクリプトを定義しましょう。次のスクリプトセクションをpackage.json
に追加するだけです<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
<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>
テスト自体を配置したら、残っているのは、テストを実行するスクリプトを定義することだけです。次のスクリプトをpackage.jsonに追加しましょう。
<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>
回帰の導入
ここでいくつかの重要なことが起こりました。最初に、Phantomcssは、スクリーンショットBody_0.pngの不一致のためにテストが失敗したと報告しました。不一致は11.41%で測定されます。第二に、現在のバージョンと以前のバージョンの違いは、障害フォルダーに保存されました。開くと、このようなスクリーンショットが表示されます:<span>"test": "casperjs test test.js"</span>
スクリーンショットは、変更された領域を便利に強調しているため、違いを簡単に見つけることができます。
変更を受け入れる
<span><span><span><div</span>></span>Hello, %username%!<span><span></div</span>></span></span>
基本の段階が得られたので、このツールを独自のワークフローに統合することを考え始めることができます。それはかなりプロジェクト固有であるため、その詳細には入りませんが、ここに熟考する質問がいくつかあります:実際のウェブサイト、または別のUI要素のみが存在するあるある種のスタイルガイドに対してテストを実行しますか?
Can PhantomCSS handle dynamic content?
How do I debug tests in PhantomCSS?
Can I customize the comparison process in PhantomCSS?
What are the alternatives to PhantomCSS for visual regression testing?
以上がPhantomcssによる視覚回帰テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。