Chromium Chronicle #10: Pixel テストで UI の回帰を把握する

project_path: /blog/_project.yaml book_path: /_book.yaml page_type: blog refresh_date: 2020-02-05 description: Chrome のテスト戦略は、自動化された機能の正確性テストと手動テストに大きく依存していますが、いずれも軽微な UI の低下を確実に検出することはできません。ピクセルテストを使用すると、パソコンのブラウザの UI テストを自動化できます。 image_path: ../images/chromiumchronicle.jpg keyword: docType:Blog,chromiumchronicle

エピソード 10: Sven Zheng、ワシントン州ベルビュー(2020 年 1 月)
前のエピソード

Chrome のテスト戦略は、自動化された機能の正確性テストと手動テストに大きく依存していますが、いずれも軽微な UI の回帰を確実に検出することはできません。ピクセルテストを使用して、パソコンのブラウザの UI テストを自動化します。

ピクセルテストを作成する場合は、(1)アニメーションを無効にする、(2)モックデータを使用して、(3)可能な最小のサーフェス領域をテストすることで、不安定性を回避します。

以下は、アドレスバーのピクセルの正確性を確認するために使用するサンプル画像です。

ピクセル比較に使用されるアドレスバー画像。

ブラウザを検証するためのコードは、次の画像と一致します。

IN_PROC_BROWSER_TEST_F(SkiaGoldDemoPixelTest, TestOmnibox) {
  // Always disable animation for stability.
  ui::ScopedAnimationDurationScaleMode disable_animation(
      ui::ScopedAnimationDurationScaleMode::ZERO_DURATION);
  GURL url("chrome://bookmarks");
  AddTabAtIndex(0, url, ui::PageTransition::PAGE_TRANSITION_FIRST);
  auto* const browser_view = BrowserView::GetBrowserViewForBrowser(browser());
  // CompareScreenshot() takes a screenshot and compares it with the
  // golden image, which was previously human-approved, is stored
  // server-side, and is managed by Skia Gold. If any pixels differ, the
  // test will fail and output a link for the author to triage the
  // new image.
  bool ret = GetPixelDiff().CompareScreenshot("omnibox",
      browser_view->GetLocationBarView());
  EXPECT_TRUE(ret);
}

このコードは chrome/test/pixel/demo/skia_gold_demo_pixeltest.cc にあります。 関連するヘッダーは、単体テストの場合は skia_gold_pixel_diff.h、ブラウザテストの場合は browser_skia_gold_pixel_diff.h です。

ピクセルの差分と承認プロセスは Skia Gold によって行われます。Skia Gold ピクセルテストでは視覚的な承認ワークフローが提供され、デベロッパーは複数のゴールド イメージを承認することで小さなフレークを受け入れることができます。

現在、テストスイートは Windows FYI bot で実行されています。ブラウザテストとビューの単体テストがサポートされています。