テストを高速化する
エンドツーエンドのテストスイートにAxe Watcherが加える時間を短縮するための手法
Axe Watcherをエンドツーエンドのテストスイートに統合すると、Watcherがテストで訪れる各ページを分析するため、時間がかかります。そのオーバーヘッドが問題となる場合、以下の手法で削減しつつ、重要なカバレッジを維持できます。
テストする必要のないページを除外する
テストスイートがアクセシビリティをテストする必要のないページ(ログインページ、サードパーティのページ、管理ダッシュボード、他のチームが管理するチェックアウトフロー)を訪問する場合、 excludeUrlPatternsを使用して完全にスキップできます。ページ全体をスキップすることは、テスト時間を短縮する最も効果的な方法です。
JavaScript または TypeScript:
axe: {
excludeUrlPatterns: [ 'https://example.com/login*', 'https://example.com/admin/**' ]
}Java:
AxeWatcherOptions options = new AxeWatcherOptions();
options.setExcludeUrlPatterns(new String[] {
"https://example.com/login*",
"https://example.com/admin/**"
});パターン構文とマッチングの例については、 分析対象URLの除外 を参照してください。
特定のページセクションに分析を限定する
ページ全体を分析する代わりに、 runContext を使用してテストがカバーするセクションに焦点を当てます。たとえば、テストがチェックアウトフォームのみをカバーする場合、ナビゲーション、フッター、サイドバーを分析する必要はありません。
JavaScript または TypeScript:
axe: {
runContext: {
include: '.checkout-form',
exclude: '.site-navigation'
}
}Java:
AxeRunContext context = new AxeRunContext()
.setInclude(Arrays.asList(".checkout-form"))
.setExclude(Arrays.asList(".site-navigation"));
AxeWatcherOptions options = new AxeWatcherOptions();
options.setRunContext(context);含める要素を指定するときに、 runContextを使用すると、Axe Watcherは のみ 一致する要素を分析します。セレクタがページ内の何かに一致しない場合、何も分析されず、ページの状態もキャプチャされません。この構成をデプロイする前に、セレクタを再確認してください。
(JavaScript/TypeScript) runContext または(Java) AxeRunContext の詳細については、こちらを参照してください。
高コストのルールを無効にする
一部のaxe-coreルールは計算量が多いです。例えば、 color-contrast ルールは、ページ上のすべての可視テキスト要素の描画された色をブラウザで計算する必要があり、コンテンツが豊富なページではかなりの時間がかかることがあります。
で特定のルールを無効にすることができます。 runOptions.rules:
JavaScript または TypeScript:
axe: {
runOptions: {
rules: {
'color-contrast': { enabled: false }
}
}
}Java:
Map<String, AxeRuleOptions> rules = new HashMap<>();
rules.put("color-contrast", new AxeRuleOptions().setEnabled(false));
AxeRunOptions runOptions = new AxeRunOptions();
runOptions.setRules(rules);
AxeWatcherOptions options = new AxeWatcherOptions();
options.setRunOptions(runOptions);ルールを無効にすると、そのルールで検出された問題は結果に表示されません。無効にしたルールを別の専用のテストスイートで実行することを検討し、永久にスキップしないことをお勧めします。
を使用すると、 runOptions.rules (または runOnly)を使用すると、これらの設定が組織のグローバルなAxe設定と競合する可能性があるため、警告が生成されます。 runOptionsとrunOnlyまたはRulesの使用を参照してください。
(JavaScript/TypeScript) runOptions または(Java) AxeRunOptions の詳細については、こちらを参照してください。
手動モードを使用してどのテストがページを分析するかを制御する
デフォルトでは、Watcherはテストで訪れるすべてのページを自動的に分析します。テストスイートの大部分がチェックする必要のないページを訪問する場合、グローバルに自動分析をオフにし、必要なテストでのみ有効にすることができます。
JavaScript または TypeScript:
axe: {
autoAnalyze: false
}Java:
AxeWatcherOptions options = new AxeWatcherOptions();
options.setAutoAnalyze(false);自動分析を無効にすると、必要な結果を取得する場所で analyze() を明示的に呼び出し、 start() / stop() を使用して、テストスイートの一部で自動分析を再開する場所を指定します。
完全な指示と例については、 スキャンの制御 を参照してください。
テストの並列実行
テストインフラストラクチャが並列実行をサポートしている場合、複数のワーカーでテストスイートを実行することで、総壁時計時間を短縮できます。Watcherは並列テストランナーをサポートしているので、各ワーカーが同じ非nullを共有することを確実にするだけで済みます。 buildID 結果が上書きされずに結合されるようにします。
詳細は 並列でテストを実行する の設定手順を参照してください。
概要
| 手法 | 最適なケース | トレードオフ |
|---|---|---|
| ページを除外 | チームが所有していない、またはテストが不要なページ | 重要なページが誤って見落とされる可能性がある |
| ページセクションを制限 | 大きなページでテストに関係する部分のみ | 選択されたセクション外の問題が見つからない |
| 高コストなルールを無効化 | チームは特定の高コストなルールが自分たちの状況に当てはまらないと判断する | これらのルールはこのテストスイートで実行されない |
| 手動モード | アクセシビリティテストに関連しない多くのページを訪問するテストスイート | 明示的な analyze() / start() / stop() テストコード内の呼び出しが必要 |
| 並列テスト | 並列ワーカーをサポートするCIインフラを持つチーム | ワーカー間の調整が必要 buildID |
