Cypress を使用して不安定な E2E テストを自動的に再試行する


エンド ツー エンドの自動テストは不安定であることで有名です.自動化されたテストに時間を費やしたことがあれば、予測不可能または一貫性のない E2E テストを見たことがあるでしょう.失敗したテストのトラブルシューティングに行くと、突然合格になります.翌朝、また失敗.

予測できない結果、手動で再現できない障害、および困難で時間のかかる根本原因分析を伴うテストがある場合、不安定なテストになります.

これらの自動テストが CI パイプラインをブロックしており、失敗を手動で再現できない場合は、テストを自動的に再試行することを検討してください.再試行ロジックにより、テストがパイプラインにとどまり、合格する機会が与えられます.

過去に、この種のテストに対処するためにカスタム コードが書かれているのを見たことがあります.テストに合格するか、再試行回数が満たされるまで、コードは何回かループします.

不安定なテストを自動的に再試行する



サイプレスは、失敗したテストを再試行する非常に簡単な方法を提供します.コードを書く必要はありません.例えば:

it(
    'my flaky test',
    {
      retries: {
        runMode: 2,
        openMode: 0,
      },
    },
    () => {
      cy.visit('https://locahost:3000/')
      // ...and more steps...
    }
  )


それがどれほど簡単か分かりますか?
"cypress run" コマンドを使用すると、"runMode" カウントは、合格するまでテストを再試行する回数を示します. "openMode" でテスト ランナーを実行すると、 "cypress open" カウントが適用されます.
"cypress run" モードでは、このテストは合計 3 回試行され、合格する可能性があります.

この構成を不安定なテストに慎重に適用することで、不安定さの根本原因を特定するための時間を稼ぐことができます.

失敗したすべてのテストを自動的に再試行する



前の例では、再試行を 1 つのテストに適用しました.再試行に対するよりグローバルなアプローチが必要な場合は、"cypress.json" ファイルで設定できます.

"retries": {
    "runMode": 2,
    "openMode": 0
  }


この構成変更により、"cypress run" を使用して実行されたすべての失敗したテストは、最大 3 回試行されます.

失敗したテストを自動的に再試行しない理由



一部のテストは不安定ですが、他のテストは一貫して失敗しています.既知のバグ、新しいバグ、または自動化コードの問題が原因で失敗する場合がありますが、すべてに 1 つの共通点があります.彼らは常に失敗します.これらのテストを再試行しても役に立たず、テスト スイートの実行時間が長くなるだけです.

テストが一貫して失敗する場合、再試行しても意味がありません.

要約



ご覧のとおり、Cypress は失敗したテストを再試行するための使いやすいメカニズムを提供します. FLAKY テストと FAILED テストには違いがあることを覚えておいて、状況に応じてサイプレスの再試行メカニズムを適切に使用してください.

いつものように、詳細については Cypress doco を確認してください.

より多くのテスト自動化コンテンツについては、私の blog site を購読してください.ありがとう!