テストは、実行中にデータを作成することがよくあります。たとえば、新しいアカウント、レコード、商品アイテムなどです。こうしたデータを確実に削除する方法がないと、テストが終了した後も長期間にわたって環境内に蓄積されてしまう可能性があります。テストを自己完結型に保つには、テストの最後にあるステップグループまたはフローを ティアダウン(teardown) としてマークできます。ティアダウンは、テストが失敗した場合も含め、テストを実行するたびに毎回実行されます。そのため、テストが作成したデータはいずれの場合もクリーンアップされます。
この記事では、ティアダウンを使ってテストデータをクリーンアップする方法を、次の内容を含めて説明します。
- ステップグループまたはフローをティアダウンとしてマークする
- 常に実行されるクリーンアップステップを作成する
- テストが失敗したときだけティアダウンのステップを実行する
- ティアダウンとクリーンアッププランステージを使い分ける
ステップグループまたはフローをティアダウンとしてマークする
ステップグループやフローは、テストの最後のステップである限り、どれでもティアダウンとして機能させることができます。ティアダウンとしてマークするには、次の手順を実行します。
- 最新バージョンのmablデスクトップアプリで、mablトレーナーでテストを開きます。
- クリーンアップに使用したいステップグループまたはフローを、テストの最後のステップとして追加します。
- ステップグループまたはフローにカーソルを合わせ、…(その他の操作) をクリックします。
- ティアダウングループとして実行 または ティアダウンフローとして実行 を選択します。
ティアダウンのオプションは、ステップグループまたはフローがテストの最後のステップである場合にのみ表示されます。表示されない場合は、その後ろに他のステップがないことを確認してください。
ティアダウンとしてマークされたステップグループ
常に実行されるクリーンアップステップを作成する
優れたティアダウンは、テストが作成したデータだけを正確に削除し、それ以外は削除しません。これを確実に行う方法の1つは、テストがデータを作成する際にそのデータの識別子を取得して変数に格納し、ティアダウンでその変数を使って、削除対象として同じレコードを指定することです。
たとえば、顧客アカウントを作成するテストでは、新しいアカウントIDをページのURLから抽出して変数に格納することが考えられます。その後、ティアダウンがその変数を読み取り、一致するアカウントを削除します。これにより、どのアカウントを作成した場合でも、各実行が自身の作成したデータをクリーンアップします。
ティアダウンはテストが失敗した場合でも実行されるため、このパターンによって、テストの途中で失敗してもデータが取り残されることを防げます。アカウントを作成した後、完了する前にテストが失敗した場合でも、ティアダウンは実行され、アカウントを削除します。
アサーションではなく、クリーンアップステップを作成する
ティアダウンは最後まで実行されることを前提としているため、その中で失敗が発生するとテストが失敗します。これはPlaywrightやJestのようなフレームワークと同じ動作です。失敗する可能性のあるアサーションではなく、確実にクリーンアップを行うティアダウンステップを作成してください。作成したデータについて検証が必要な場合は、ティアダウンの前に、テストの本体で行ってください。
テストが失敗したときだけティアダウンのステップを実行する
ティアダウンはテストが成功しても失敗しても実行されますが、その中のすべてのステップを毎回実行する必要はありません。失敗後にのみ必要なクリーンアップや、問題が起きたときにだけ収集したい診断情報は、テストの結果をチェックする条件付きステップの中に置くことができます。
ティアダウンが始まると、mablはそれより前に実行されたステップの結果に基づいて、次の変数を設定します。
| 変数 | テストが失敗した場合 | テストが成功した場合 |
|---|---|---|
run.test_status |
failed |
passed |
run.failure_message |
失敗したステップのメッセージ | 空 |
run.failed_step_number |
失敗したステップの表示番号(1.1など) |
空 |
これらの変数にアクセスできるのは、ティアダウンのステップグループとフローの中だけです。ティアダウンの外では、3つの変数はすべて空になります。変数はティアダウンの開始時に評価されるため、成功していたテストがティアダウンのステップで失敗するというまれなケースでも、run.test_statusがpassedからfailedにさかのぼって更新されることはありません。
特定の結果の場合にのみティアダウンのステップを実行するには、次の手順を実行します。
- ティアダウン内にIFステップを追加します: [+ (ステップを追加)] > [条件付き] > [IF]。
-
run.test_statusを比較する変数アサーションを条件の基準として設定します。 - IFブロックの中に、その結果の場合に実行するステップを記録します。
ほとんどのケースは、次の2つのパターンでカバーできます。
-
失敗後にのみクリーンアップする:
run.test_statusがpassedと等しくない、という条件分岐を使用します。failedではなくpassedと比較することで、万一変数が空だった場合でもクリーンアップが実行されます。 -
失敗後にのみ診断情報を取得する:
run.test_statusがfailedと等しい、という条件分岐を使用し、失敗を報告するステップ(課題管理ツールにチケットを作成するAPIステップなど)でrun.failure_messageとrun.failed_step_numberを使用します。
条件分岐がfalseに評価された場合、その中のステップはテストを失敗させることなくスキップされます。そのため、IFステップでrun.test_statusをチェックすることは、ティアダウンにアサーションを含めないという上記のガイダンスと矛盾しません。
ティアダウン内でのrun.test_statusに基づく条件分岐
ティアダウンとクリーンアッププランステージを使い分ける
ティアダウンのステップグループやフローは、データを作成したテストの内部に存在します。そのため、1つのテストが自身の作成したデータをクリーンアップする必要がある場合に適した選択肢です。クリーンアップはテストと一緒に移動するため、別途構築して維持するティアダウン用のテストやプランステージは必要ありません。
複数のテストにまたがるクリーンアップや、どのテストがデータを作成したかにかかわらず実行する必要があるクリーンアップには、プラン内の専用のクリーンアップステージのほうが適しています。クリーンアップテストのステージを構築し、常にステージを実行の設定を有効にすると、前のステージが失敗した場合でもそのステージが実行されます。このようなプランの構成方法について詳しくは、テストをプランにまとめるを参照してください。