🖥

node.js で VRT – PlayWright で Webページにアクセスしてスクリーンショットを撮影し、reg-cli で差分レポー

2024/03/03に公開

事前準備

npm インストール

package.json の例

{
  "devDependencies": {
    "playwright": "^1.42.0",
    "@playwright/test": "^1.42.1",
    "http-server": "^14.1.1",
    "reg-cli": "^0.18.1"
  }
}

npm install

Playwright セットアップ

npm init playwright@latest

質問にはてきとうに Yes と答えておく

localでWebサーバーを起動しておく

HTML

見た目の違うページを2個用意しておく

例:

example1.html

<h1>Hello WoRLD!</h1>

example2.html

<h1>Hello WoRLD!</h1>

Web サーバーを起動する

以下ページにアクセスできるようにしておく

npx http-server --port=8080

Playwright でスクリーンショットを撮影する

Playwright とは

Webブラウザを自動操作できるテストツールである

何をするか

  • Playwright に localhost にアクセスさせて、そのスクリーンショットを撮影しておく
  • ここでは簡単に差分を比較するために、2個の別々のページのスクリーンショットを撮影している
  • VRT(ビジュアルリグレッション・テスト)として運用する場合、実際には「ページAを撮影する」ということをデプロイの前後などで複数回おこなって、差分を検知すると良い

テストファイルの例

tests/example.spec.ts

import { test } from "@playwright/test";

test("Screen Shots", async ({ page }) => {
  await page.goto("http://localhost:8080/example1.html", { waitUntil: "networkidle" });

  await page.screenshot({ path: "expected_images/example.png" });

  await page.goto("http://localhost:8080/example2.html", { waitUntil: "networkidle" });

  await page.screenshot({ path: "actual_images/example.png" });
})

テスト実行

npx playwright test

これでページ2個分のスクリーンショット画像が保存される

備考

  • ここではlocalhostのWebページを利用したが、実際には http://example.com などグローバルなページに対しても実行できる

reg-cli

画像ファイルのあるディレクトリ2個を指定して、差分レポートを出力する

npx reg-cli ./expected_images ./actual_images ./diff --report ./report.html

差分検知

今回は差分があるパターンなので、差分検知されてコマンドはエラーで終わるが、これが正常動作

レポートを開く

report.html を開く

差分レポートを開くと、差分が検知されているのが分かる

image

image

備考

  • CI に組み込む場合は reg-cli ではなく reg-suit を使うと良い

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

公開日時

2024-03-02

Discussion