アプリケーションに問題がないのに、なぜテストが失敗するのですか?
ネットワークの遅延、DNSエラー、サイトからの403や429の応答、Bot対策の表示、あるいはブラウザのクラッシュなどが発生すると、E2Eテストは赤(失敗)になります。しかし、これらはいずれもアプリケーションの不具合ではありません。Verdict System LLCのNexus Studioは、こうした失敗に対してそれぞれ独自の判定を付与します:TIMEOUT、UNREACHABLE、BLOCKED、CRASHED。これらがアプリケーションのバグとして報告されることはありません。
執筆:Nexus Studioチーム(Verdict System LLC)。2026年10月7日。
バグがないのにテストが失敗する原因は何ですか?
テストは「何かが起きなかった」ことしか報告しません。その原因はお客様のコードとは無関係な、次の4つの領域に潜んでいる可能性があります:
- ページの読み込みが遅く、テストがタイムアウトした
- 名前解決ができなかったなどの理由で、ホストに到達できなかった
- サイトが403、429、CAPTCHA、またはBot対策で防御したため、リクエストが製品に到達しなかった
- ブラウザまたはプロセスが異常終了した
これらがすべて単なる「赤(失敗)」として表示されると、チームはバグとして起票するか、結果を確認する代わりに再実行することに慣れてしまいます。どちらにしても、本物の不具合がノイズの中に埋もれてしまいます。
Nexus Studioはどのようにして誤検知とバグを見分けているのですか?
テストが失敗すると、エンジンはエラーメッセージと実行のネットワークログを読み取り、決められた順序でパターンのグループと照合します。最初に一致したグループによって判定(verdict)が決まります。順序は CONFIG_ERROR、次に CRASHED、BLOCKED、UNREACHABLE、TIMEOUT と続き、その後にようやく BREACHED_FLAKY または BREACHED となります。そのため、バグ報告を意味する判定である BREACHED は、環境やハーネスのパターンでは説明できない失敗のために残されます。パターンは Playwright と Selenium WebDriver の両方の文言をカバーしています。
TIMEOUT、UNREACHABLE、BLOCKED、CRASHED は何を意味しますか?
- TIMEOUT: テストが時間内に応答を取得できませんでした。これはアプリケーションが壊れている証拠でも、正常に動作している証拠でもありません。実行結果からは判断できません。タイムアウトしたナビゲーションは、処理が開始されページが遅かったため、TIMEOUT となります。
- UNREACHABLE: ホストにまったく到達できませんでした。名前解決ができなかった場合、接続が拒否された場合、マシンがオフラインの場合のように、ページが確認される前に DNS または接続が失敗しました。証明書エラーはここには含まれません。それは指摘事項となります。
- BLOCKED: サイトが 403、429、ブロックページ、またはボットチャレンジによって防御しました。画面上に防御が表示されていた場合、metadata.json にその名前が記録されます。スリープ状態になったりロックされたりした実際のアンドロイド端末も、満たされていない前提条件として BLOCKED になります。
- CRASHED: ブラウザまたはプロセスが異常終了しました(例: 閉じられたページ、DevTools プロトコルエラー、終了した WebDriver セッションなど)。これはインフラの問題です。マシンとドライバーを確認してください。
判定ガイドには、それぞれの背後にある正確なエラーパターンが記載されています。
CI パイプラインにはどのように表示されますか?
14 個の判定のうち 7 個は終了コード 0 で終了します(SECURE、AUTO_RECOVER、FLAKY、CHAOS_RESILIENT、PERFORMANCE_DEGRADED、A11Y_VIOLATION、SECURITY_VIOLATION)。残りの 7 個は終了コード 1 で終了し、TIMEOUT、UNREACHABLE、BLOCKED、CRASHED はその中に含まれます。そのため、テストが合格しなかったためにビルドは赤のままですが、レポートと履歴(History)にその原因が示されます。pytest および Selenium ランナーは、実行をまったく開始できなかった場合に終了コード 2 で終了します。
誤判定による失敗(false failure)では、それぞれどのような証拠が保持されますか?
4 つのいずれも、report.md、metadata.json、raw-data.json、および最終フレームのスクリーンショットを保持します。動画の扱いは異なります:
- TIMEOUT および BLOCKED: 動画はデフォルトでオフになっています。[Settings] の [Keep failure video for] でオンにしてください。
- UNREACHABLE: ページが読み込まれず録画が空白になるため、動画は提供されません。
- CRASHED: 異常終了したブラウザの録画は壊れて出力されるため、動画は提供されません。
Playwright の Web 実行およびエミュレートされたモバイル実行のみが動画を録画します。実際のアンドロイド端末、Selenium の実行、および API テストでは録画されません。
Jira連携を有効にすると、TIMEOUT時はチケットが作成されますが、アクセス拒否(block)、クラッシュ、アクセス不能なサイトの場合は作成されません。
制限事項には何がありますか?
- 判定分類はエラーテキストを読み取ります。ご自身で作成したメッセージに
403、Forbidden、またはAccess Deniedが含まれている場合、BLOCKEDとして認識されます。カスタムアサーションメッセージは具体的に記述し、判定結果に違和感がある場合はmetadata.jsonを開いてご確認ください。 - TIMEOUTはアプリケーションが正常に動作している証明にはなりません。実行するたびにタイムアウトするテストは、確認する価値があります。
- タイムアウト時間を長くしても破損した要素は隠せません。単に失敗するタイミングが遅くなるだけです。
- これらの判定結果はテスト実行が失敗した原因を示します。原因そのものを解消するわけではありません。アクセス拒否されたサイトは、アクセス方法を変更しない限りブロックされたままです。
どこで確認できますか?
エビデンスページでは、1つの失敗したテストを追跡し、各判定によってディスクに残されるすべてのファイルを一覧表示します。判定ガイドでは、エンジンが全14種類の判定を決定する順序を説明しています。30日間無料トライアルでは、ご自身のテストで同じエンジンを実行できます。