テストを高速化する
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を使用するを参照してください。
(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の調整が必要 |
