web-dev-qa-db-ja.com

APIテストは相互に依存する必要がありますか?

APIレベルでテストしたいと書いたAPIがあります。

外部の観点からテストしている場合、各テストのデータセットをどのように管理できますか?私が思いつくことができる最も簡単な解決策は、各テストが前の1つのセットの状態に依存するテストスイートを作成することです。

たとえば、コメントが投稿に正常に追加されたことをテストするには、特定の投稿が最初に存在し、その投稿が前のテストで作成された可能性があることを確認する必要があります。

この種のストーリーテリングはAPIテストで一般的ですか?またはより良い方法はありますか?

2
Shoe Diamente

はい。実際の設定を実際にテストして、機能するかどうかを確認する場合は、テストの状態を設定する必要があるのを避けられません。

したがって、この例では、新しい投稿を作成してからコメントを追加し、テストスイートでその依存関係と順序を設定します。

しかしながら!これが、ユーザーが期待することではない場合でも、投稿の削除機能も必要な理由です。これにより、テストが自動的にクリーンアップされるため、何百万ものテストポストが作成されることはありません。

2
Ewan

とにかく、いくつかのテストデータでテストスイートをセットアップする必要はありませんか?アプリケーションのビルド手順の一部として(たとえば、テストデータスクリプト)、またはテストのセットアップ/ティアダウンの一部として?

私は、すべてのテストが「スタンドアロン」であり、他のテストに依存するべきではないと感じがちです。エントリーが入ることをテストしたい場合は、1つのテストでそれを行い、コメントがエントリーになったことをテストしたい場合は、実際のテストの前にエントリーを事前設定して、テストにエントリーがあることを確認しますコメントする必要がありますが、実行する前のテストに依存しないでください。

その理由は、テストを実行しているとき、1つのテストの失敗が後続の一連の要素をテストする機能をブロックしたくないためです。 CI/CDシナリオに参加し、エントリーテストに関係なくコメントテストでyes/noが返されるようにしたい場合は、エントリーテストを停止して修正し、テストを再実行します。テストも失敗しています。すべてのテスト結果の包括的な「真の」リストを作成する代わりに、同じ「真の」結果が得られるかどうかを確認するには、テストを複数回再実行する必要があります。

何百万ものテストポストについては、テスト環境を使い捨てにし、テストスイートを実行するたびに最初から再構築する必要があるため、これは問題になりません。

1
jleach