TL;DR

画面のスクリーンショットを、前もって保存した基準の画像と比べ、見た目が意図せず変わっていないかを確かめるテスト。VRT と略す。

仕組み

Playwright のドキュメントでは、この機能を Visual comparisons と呼んでいる。expect(page).toHaveScreenshot() を初めて実行すると、基準の画像がないのでテストは失敗し、そのときのスクリーンショットが基準として保存される。2 回目以降は、新しいスクリーンショットを基準と比べ、違いがあればテストが失敗する。ページを意図して変えたときは、--update-snapshots を付けて実行し、基準を更新する。

比較には pixelmatch というライブラリを使う。1 ピクセルの色の差をどこまで許すか(threshold)や、違ってよいピクセルの数(maxDiffPixels)を設定できる。

注意点

ブラウザの描画は、OS やそのバージョン、設定、ハードウェア、ヘッドレスモードかどうかなどで変わる。安定した結果を得るには、基準の画像を作ったのと同じ環境でテストを実行する。ホバーの効果が写り込むこともあるので、撮る前にマウスを外に動かすなどの工夫がいる。

関連

出典