Flakyテストとは、コードに変更がないにもかかわらず、外部要因によって通過したり失敗したりするテストです。これは自動化への信頼を損ない、CI/CDプロセスを難しくします。
問題の歴史: Flakyテストの問題は、大量のE2E、統合、UIテストの登場とともに、環境や依存するサービスの安定性が保証されない状態で生じました。当初、これらの失敗は無視されたり、「手動で再実行」されたりしました。
問題:
解決策:
自動再実行のコード例:
import pytest @pytest.mark.flaky(reruns=3, reruns_delay=2) def test_random_fail(): ... # テストコード
主な特徴:
Flakyテストは常にインフラストラクチャの問題か?
いいえ、Flakyはビジネスロジックのエラー、コードのレース、非同期性、または時間の扱いの誤りによって引き起こされることがあります。
失敗したテストを再実行するだけで十分か?
いいえ、リトライは問題を隠すだけです。原因を特定し、修正する必要があります。
すべての不安定なテストを削除すべきか?
いいえ、これらを一時的に隔離し、原因を修正する必要があります。単に永遠に除外すべきではありません。
プロジェクトではFlakyテストを単にマークし、問題を「解決不可能」として触れなくなりました。
利点:
欠点:
各不安定なテストに自動再実行と内部の不安定性管理を導入しました。原因の定期的な共同レビューを行い、バグを蓄積されるにつれて修正しました。
利点:
欠点: