1件あたり0.1%の確率でたまに落ちるテストがあるとします。50件なら、赤くなるのは4.8%の実行です。
1000件そろえると62.8%になります。本当は問題がないのに、3回に2回は赤くなります。
1件あたりの確率が小さくても、件数が増えれば一式のどれかが落ちます。掛け算で効いてきます。
E2Eテストは、たまに落ちることがあります。待ち時間や外部の応答が絡むためです。
この不安定さが一式の判定をどれだけ狂わせるのかを、実際に走らせて測りました。一式を2万回まわして数えています。
本当は問題がない状態で、各テストが独立に決まった確率で落ちるものとしました。1件でも落ちれば一式は赤です。
一式を 20000回まわし、本当は問題がないのに赤くなる割合を数える たまに落ちる確率 50件 200件 1000件 3000件 0.01% 0.5% 2.1% 9.0% 26.0% 0.10% 4.8% 17.8% 62.8% 95.0% 0.50% 22.1% 62.5% 99.3% 100.0%
1件あたり0.1%は、1000回に1回落ちるという水準です。1件だけ見れば気にならない数字です。
50件でも4.8%です。ところが1000件そろえると62.8%になります。
1件でも落ちれば赤になるので、件数が増えるほど当たりやすくなります。1件あたりの確率は変わっていません。
0.5%の行では、1000件で99.3%です。ほぼ毎回赤くなる状態で、判定として意味がなくなります。
この状態が続くと、赤を見ても誰も止まらなくなります。本物の失敗が混ざっていても、同じ扱いになります。
1件あたりの確率が小さくても、件数がそろえば毎回赤くなる。
This is useful when a test is flaky and fails intermittently.原文Playwright Docs「Test retry」 この内容の有効期限2027-02-18
落ちたら試し直す運用は効きます。毎回は出ない不具合も、同じ理屈で見逃します。
E2Eテストの不安定さに対する定番の手が再実行です。出典もこの動きを説明しています。
その説明は有効にすると、落ちたテストは通るまで、あるいは再実行の上限に達するまで、複数回試し直されるというものです。
再実行の上限 誤って赤くなる割合 不具合100%を捕まえる 不具合50%を捕まえる 不具合20%を捕まえる 1回 86.71% 100.0% 50.0% 20.0% 2回 0.47% 100.0% 25.0% 4.0% 3回 0.00% 100.0% 12.5% 0.8%
再実行なしでは86.71%が赤くなります。2回まで許すと0.47%まで落ちました。
誤検知はほぼ消えます。2回続けて偶然落ちる確率は、0.20%の2乗だからです。
右の3列が代償です。毎回は出ない不具合も、2回続けて出なければ通ってしまいます。
半分の確率で出る不具合なら、2回の再実行で捕まえられるのは25%です。3回にすると12.5%まで落ちます。
毎回出る不具合は100%のままです。再実行が消すのは、確率的に出るものだけという切り分けになります。
再実行を増やすほど、誤検知も本物の見逃しも同じ向きに動く。
When enabled, failing tests will be retried multiple times until they pass, or until the maximum number of retries is reached.原文Playwright Docs「Test retry」 この内容の有効期限2027-02-18
再実行は隠す道具ではありません。通ったことにするなら、何回目で通ったかを残します。
E2Eテストで再実行を入れるなら、再実行で通った件を別に数えます。出典の道具もその分類を持っています。
分類は3つです。1回目で通ったもの・1回目は落ちたが再実行で通ったもの・全部落ちたものです。
出典も仕組みそのものをテストの再実行は、落ちたときに自動でそのテストを走らせ直す方法であると説明しています。
2番目が手を打つ入口です。同じテストが毎週出てくるなら、そのテストを直します。
前の節の表のとおり、件数が増えるほど誤検知は積み上がります。E2Eの本数を絞ること自体が対策になります。
細かい条件は下の層で確かめます。ユニットテストの記事では、上の層に寄せると検出率まで下がることを測っています。
再実行は隠す道具ではなく、数えるための道具にする。
各テストの不安定さは独立という置き方です。実際には共通の待ち処理や外部の相手が原因で、まとめて落ちることが多くなります。その場合、一式が赤くなる割合はここより低く出ますが、直すべき箇所は1つに集まります。ここで見せているのは、1件あたりの確率が小さくても件数で効いてくることと、再実行が誤検知と見逃しを同時に動かすという関係です。
Test retries are a way to automatically re-run a test when it fails.原文Playwright Docs「Test retry」 この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る