ピクセルパーフェクトなスクリーンショットテスト: 失敗する理由と、本物のビジュアルバグを捕まえる方法
ピクセルパーフェクトなスクリーンショットテストは 2 つの点で失敗します。描画ノイズが誤報を生み、パーセントのしきい値が本物のバグを隠します。代わりに機能する方法を紹介します。
ピクセルパーフェクトなスクリーンショットテストは、スクリーンショットのすべてのピクセルを参照画像と比較します。これは 2 つの点で失敗します: 無害な描画ノイズが誤報を生み、それを黙らせるほど緩いパーセントのしきい値は、間違った数字や欠けたアイコンを通してしまいます。
ピクセルパーフェクトなスクリーンショットテストとは
Definition
ピクセルパーフェクトなスクリーンショットテストとは、新しいスクリーンショットを参照用のスクリーンショットとピクセルごとに比較するビジュアルチェックです。色が異なるピクセルはすべて差異として数えられます。差異があるか、しきい値が許す以上の差異があるとテストは不合格になります。ビジュアルリグレッションテストの最も単純な形であり、多くのチームが最初に使う方法です。
考え方自体は正しいものです: 人は画面を見て判断するので、テストも画面を見るべきです。問題は尺度にあります。画面はどのマシンでも同じピクセルで描かれるわけではなく、重要なバグはわずか数ピクセルの大きさしかないことがよくあります。
何も問題ない
何かがおかしい
ピクセル単位の比較が誤検知を生む理由
誤検知とは、アプリケーションに問題がないのに不合格になるテストのことです。ピクセル単位の比較では、人に見えるものを変えずにピクセルだけを変えるあらゆるものから誤検知が生まれます。
| ノイズの原因 | ピクセルが異なる理由 |
|---|---|
| アンチエイリアス | 文字や図形の輪郭は中間色で滑らかにされ、その滑らかさはマシンごとに異なります。 |
| フォントのスムージング | Windows では ClearType が文字を淡いカラーフリンジ付きで描き、その色は画面と設定によって変わります。 |
| グラフィックカードとドライバー | グラデーション、影、角の丸みは、別のカードでは色合いがわずかに変わることがあります。 |
| 録画と圧縮 | 動画から取った参照画像は、実際の画面より色の細部が少なくなります。 |
| 1 ピクセルのずれ | ウィンドウやレイアウトが 1 ピクセル動くと、画像のすべての輪郭が変わります。 |
| 点滅するテキストカーソル | カーソルが一方のスクリーンショットでは表示され、もう一方では消えています。 |
| マウスオーバーやフォーカスの状態 | ある実行ではポインターがボタンの上にあり、別の実行ではないため、ボタンが強調されるのは片方の画像だけです。 |
| 動的なコンテンツ | 日付、時計、カウンター、通知バッジは毎日変わります。 |
| 画面の拡大縮小の違い | 150 % のノート PC と 100 % のモニターでは、同じボタンが別のピクセルで描かれます。 |
不安定なテストには、待機やタイミングといった別の原因もあります。それらは不安定なテストと誤検知で取り上げています。
ビジュアルリグレッションテストのしきい値が本物のバグを隠す理由
ノイズへのよくある対処はしきい値です: 画像のある割合、たいてい 1 % か 2 % より差異が少なければ比較を合格にします。誤報は止まります。代わりに本物のバグが通り始めます。
- 本物のバグは画面上でとても小さいことがあります。価格や合計の数字が 1 つ違うと、変わるのは数十ピクセルです。大文字が小文字になると、さらに数十ピクセルが変わります。小さなアイコンが欠けると、数百ピクセルが変わります。パネルや画面全体に対しては、どれも 1 % をはるかに下回ります。
最も損害の大きいバグは、画面上で最も小さいことがよくあります: 請求書の数字 1 つ、法的な注意書きの単語 1 つです。
画像に占める割合は間違った尺度
画像全体で数えると、ノイズとバグは似て見えます。しかし、人の目には似て見えません。
- ノイズとは誰にも見えないものです: 少し柔らかい輪郭、少し明るい色合い、点滅したカーソル。本物の変化とは人が読んだり見分けたりするものです: 文字、数字、アイコン、色。
期待値
$12,480
今回の実行
$12,430
画像に占める割合で測った場合
数字 1 つはパネルのごく一部で、2 % のしきい値をはるかに下回ります。
合格: バグを見逃す
人の目で見た場合
合計を読む人がすぐに間違った数字に気づくように、GUI Test Studio も気づきます。
不合格: バグを検出
ですから正しい問いは、画像のどれだけが変わったかではありません。人が抱く問い、つまりこの画面を見た人に違いが見えるかどうかです。その答えは画像の大きさに左右されないので、小さなアイコンにもダイアログ全体にも当てはまります。
不安定なスクリーンショットテストへのよくある対処と、そのコスト
| 対処 | そのコスト |
|---|---|
| しきい値を上げる | ノイズは通りますが、小さなバグも通ってしまいます。 |
| 変わる部分をマスクする | 日付、時計、バッジを 1 つずつ手でマスクすることになり、マスクの下のバグは決して見えません。 |
| 失敗したテストを再実行する | 本物の失敗に偶然合格する 2 度目のチャンスを与え、実行のたびに時間も長くなります。 |
| マシンごとに参照画像を持つ | ブラウザー、システム、拡大縮小ごとに専用の画像が必要になり、変更のたびにそれぞれを撮り直さなければなりません。 |
| 環境を固定する | 1 つのマシンイメージですべてのテストを実行することになり、そこで合格したテストは、ユーザーが使う画面について何も教えてくれません。 |
Playwright のようなコードを書くフレームワークでは、toHaveScreenshot がピクセルごとの色のしきい値と、画像全体で許す異なるピクセルの最大数または最大比率を受け取ります。その数値を選び、マスクを書き、ブラウザーとプラットフォームごとに参照画像を持つのはあなたで、それを保守するコードもあなたが書きます。
GUI Test Studio がスクリーンショットを比較する仕組み
GUI Test Studio は、Web アプリ、Windows デスクトップアプリ、Android スマートフォン、ゲームのエンドツーエンドテストを、コードなしで録画から作成します。クリックや入力をした要素にはそれぞれビジュアルアサーションが付き、要素の小さな画像、つまりビジュアルターゲットを保持します。ビジュアルアサーションを参照してください。
見つける
検索フェーズ
比較する
検証フェーズ
見直し
AI スマート分析
レポート
信頼度レポート
まず要素を見つける
検索フェーズは、要素が今どこにあっても実際の画面上で見つけます。GTS Engine + AI はまずアクセシビリティ情報やページ自身の要素を通じてアプリケーションに尋ね、アプリケーションが答えないときは見た目で要素を見つけます。GUI Test Studio がすべての要素を見つける仕組みを参照してください。
比較はその後、要素がある場所で行われます。動いたウィンドウや 1 ピクセルずれたボタンは、まったく差異になりません。
次に、人が見るように比較する
検証フェーズは、要素をビジュアルターゲットと人の目と同じように知覚的に比較します。人が気づくものには気づき、誰にも見えないものは無視します。
| 画面上 | 検証フェーズの動作 |
|---|---|
| 滑らかにされた輪郭とフォントのスムージング | 無視されます: マシンごとに異なり、誰にも見えません。 |
| 録画と圧縮 | 無視されます: 動画から取った画像は実際の画面より色の細部がわずかに少なくなりますが、人には同じ画面に見えます。 |
| 1 ピクセルのずれ | 無視されます: 要素は今ある場所で比較されます。 |
| 点滅するテキストカーソル | 無視されますが、その横の変わった文字は検出されます。 |
| 間違った数字 1 つ | 検出されます: 人が最初に読むところです。 |
| 小文字になった大文字 | 検出されます: 人はすぐに気づきます。 |
| 変わった色 | 人が気づくような変化なら検出されます: 赤からオレンジに変わったアイコンは不合格です。 |
| 欠けたアイコン | 検出されます: 人はその空白に気づきます。 |
マウスオーバーの状態と日付
録画したテストでは、実行時にマウスポインターを画像を撮ったときの位置に戻します。ボタンが強調されるのは、録画で強調されていたときとまったく同じタイミングです。
毎日変わる値は、ビジュアルターゲットに含めるべきではありません。ターゲットは要素そのものにとどめ、日付、合計、カウンターは、値に関係なく形式を確認する動的テキストアサーションで確認します。テキストアサーションを参照してください。
ダークモード、別の言語、別の画面で、画面が正当に違って見えるときは、ベースラインプロファイルで環境ごとに 1 つの期待バージョンを持ってください: ダークモード、別の言語、別の画面のテストを参照してください。
ピクセル比較と GUI Test Studio、ケースごとの比較
| 差異 | 割合のしきい値を使うピクセル比較 | GUI Test Studio |
|---|---|---|
| 別のマシンでの滑らかにされた輪郭 | 厳しければ不合格、緩ければ合格 | 合格: 誰にも見えない |
| フォントのスムージングによるカラーフリンジ | 厳しければ不合格 | 合格: 誰にも見えない |
| 要素が 1 ピクセル動いた | 不合格: すべての輪郭が異なる | 合格: 要素はそれがある場所で比較される |
| 点滅するテキストカーソル | 厳しければ不合格 | 合格: 点滅するカーソルは無視される |
| マウスオーバーの強調表示 | 不合格 | 合格: ポインターは録画時と同じ位置にある |
| 今日の日付 | 毎日不合格 | 比較しない: 動的テキストアサーションが形式を確認する |
| 間違った数字 1 つ | 1 % か 2 % のしきい値なら合格 | 不合格: 人は間違った数字に気づく |
| 小文字になった大文字 | 1 % か 2 % のしきい値なら合格 | 不合格: 人は小文字に気づく |
| 欠けた小さなアイコン | 大きな画像なら合格 | 不合格: 人はアイコンが消えたことに気づく |
画像比較の許容度の選び方
GUI Test Studio では、ビジュアルアサーションの許容度は検証の厳密さで、わかりやすい言葉で選びます: 細かい部分にはより厳しく、情報の多い画面にはより寛容に。推測すべき割合はありません。
| 検証の厳密さ | 用途 |
|---|---|
| 完全 | まったく同じままでなければならない画像。 |
| 厳密 | どんな変化も重要な小さな文字や細かい部分。 |
| 標準 | 日常的なボタン、ラベル、アイコン。既定値です。 |
| 緩和 | ページ全体やゲームのシーンのような、広い領域や情報の多い画面。 |
- 1
ビジュアルアサーションを選ぶ
GUI Test Studio でテストを開き、タイムライン上のビジュアルアサーションをクリックします。その設定が「プロパティ」パネルに表示されます。
- 2
検証の厳密さを選ぶ
日常的なボタン、ラベル、アイコンには標準のままにします。小さな文字や細かい部分にはより厳しいレベル、広い領域や情報の多い画面にはより寛容なレベルを選び、まったく同じままでなければならない画像にだけ完全を選びます。
- 3
「軽微な描画アーティファクトを無視」はオンのままにする
これは既定でオンなので、マシンごとに異なる滑らかにされた輪郭は無視されます。その輪郭自体をテストするときだけオフにしてください。
- 4
テストを実行してレポートを読む
「テストを実行」をクリックします。信頼度レポートが変化した部分を光らせて示し、アサーションが不合格になった理由を 1 文で伝えます。
- 5
差異が想定内なら「AI への指示」を加える
「詳細設定」で、「フォントサイズは無視する」のような短い言葉を書きます。AI スマート分析は、そのアサーションを判定するときにそれに従います。
ほとんどのテストではこれ以上は必要ありません。各レベルの正確な設定と、まれに必要になる詳細設定は、ビジュアルアサーションとアサーションの設定にあります。
AI によるビジュアルテスト: わかりやすい言葉でのセカンドオピニオン
ビジュアル比較は、何かがどこで変わったかを伝えます。言葉による 2 つ目の意見があれば、どう対処するかを決めやすくなります。それを担うのが AI スマート分析で、オンにするまではオフです。
マウスポインターと点滅するテキストカーソルは、AI にとって決して差異になりません。合格したアサーションが AI に送られることはありません。
クラウドのモデルとご自身のキーで動かすことも、ご自身のコンピューター上のローカル AI モデルで動かすこともできます: 当社が提供するモデルでも、お持ちのモデルでも構いません。想定内の差異もあり、どれがそうかを知っているのはあなただけなので、アサーションに「フォントサイズは無視する」や「アイコンは何色でもよい」のような「AI への指示」を与えてください。AI スマート分析を参照してください。
ビジュアルの失敗の読み方
実行後、信頼度レポートは不合格の各アサーションを、期待される画像、見つかった画像、そして画面上で光って示される変化とともに表示します。判定は、何がどこで変わったかを 1 文で伝えます。
変更が意図したものなら、レポートから新しい見た目を受け入れると、テストはそれ以降その見た目を期待します。
コードによるチェックがまったく見逃すビジュアルバグについては、自動テストが見逃すビジュアルバグで取り上げています。
要点
- 1ピクセルパーフェクトなスクリーンショットテストは 2 つの点で失敗します: 描画ノイズが正しい画面を不合格にし、パーセントのしきい値が本物のバグを通してしまいます。
- 2ノイズは誰にも見えないもの、本物の変化は人が気づくものです: 数字、文字、アイコン、色。
- 3画像に占める割合は間違った尺度です。代わりに、画面を見た人に何が見えるかを問いましょう。
- 4GUI Test Studio はまず要素を見つけてから、人の目と同じように比較するので、スムージング、圧縮、点滅するカーソルでテストが不合格になることはありません。
- 5AI スマート分析はわかりやすい言葉で見直しを加え、オンにすればその答えが最終判定になります。
よくある質問
ピクセルパーフェクトなテストとは何ですか?
ピクセルパーフェクトなテストは、アプリケーションのスクリーンショットを参照用のスクリーンショットとピクセルごとに比較し、違いがあれば不合格にします。誰にも見えない変化も含めて、あらゆる変化を捉えます。そのため、正しい画面でも誤報を出します。
何も変わっていないのに、スクリーンショット比較テストが失敗するのはなぜですか?
同じ画面でも、どこでも同じピクセルで描かれるわけではないからです。滑らかにされた輪郭、フォントのスムージング、グラフィックカード、画面の拡大縮小、点滅するテキストカーソル、マウスオーバーの強調表示は、人が気づくものを何も変えずに一部のピクセルを変えます。ピクセル単位の比較は、それらをすべて数えてしまいます。
ビジュアルリグレッションテストのしきい値は何 % がよいですか?
どの画像にも合う単一のパーセントはありません。大きなパネルで間違った数字 1 つを捕まえられるほど小さい割合では無害なノイズで不合格になり、ノイズを無視できるほど緩い割合ではその数字を通してしまいます。代わりに、画面を見た人に違いが見えるかどうかという、人が抱く問いを立ててください。GUI Test Studio はそのように比較します。
アンチエイリアスはビジュアルテストの誤検知の原因になりますか?
はい、最もよくある原因の 1 つです。文字や図形の輪郭は中間色で滑らかにされ、その滑らかさはマシン、グラフィックカード、設定によって異なります。GUI Test Studio は人が画面を見るように比較するので、誰にも見えない滑らかさは無視されます。
ピクセル差異のしきい値は本物のバグを隠すことがありますか?
はい。間違った数字 1 つ、小文字になった大文字、欠けた小さなアイコンが変えるのは数十から数百ピクセルで、大きな画像のごく一部にすぎません。1 % か 2 % のしきい値では、そのすべてが通ってしまいます。
GUI Test Studio はスクリーンショットをどのように比較しますか?
2 つのフェーズで比較します。検索フェーズは、要素がどこへ動いていても画面上で見つけます。次に検証フェーズが、人の目と同じように要素を期待する内容と比較します: 間違った数字、変わった単語、欠けたアイコン、違う色は捉え、誰にも見えない描画ノイズは無視します。
AI によるビジュアルテストはピクセル比較より優れていますか?
両方を組み合わせるのが最善です。丁寧なビジュアル比較は速く再現性があり、ほとんどのアサーションをそれだけで判定します。GUI Test Studio では、AI スマート分析が不合格のアサーションだけを見直し、何が変わったかをわかりやすい言葉で伝え、オンにすれば最終判定を下します。
ビジュアルテストで日付やカウンターはどう扱えばよいですか?
ビジュアルアサーションが比較する画像からは外し、代わりにテキストアサーションで確認してください。動的テキストアサーションは、日付や金額のように値が正しい形式かどうかを、今日の値に関係なく確認します。
Playwright、ClearType、Windows は Microsoft Corporation の商標です。


