自動テストを扱う際には、正しい構造がその効果と持続可能性の鍵となります。
問題の歴史
以前は、自動テストがモノリシックで密接に関連したスクリプトとして作成されることがよくありました。これにより、保守や拡張が難しくなっていました。テストの数が増えるにつれて、適切なアーキテクチャの重要性が明らかになりました。
問題
明確な構造がないと、以下のような問題が発生します:
解決策
テストには明確な抽象化レベルを使用してください:
良い実践として、次のような構造を使用することが推奨されます:
# 構造の例 /tests /features test_order_creation.py /steps order_steps.py /pages order_page.py
主な特徴:
長いエンドツーエンドテストを書くのが良いか、短いモジュールテストを書くのが良いか?
多くの場合、エンドツーエンドのみを選択しますが、目標に応じて異なる種類のテスト(ユニット、API、UI)を組み合わせることが重要です。
テストでUIをテキストとロケーターの両方で確認できますか?
必ずしも正しいわけではありません:両方の方法を同時に使用することは可能ですが、UIの変更やテストのロジックがそれを正当化する場合に限ります。しばしば過剰で保守が複雑になります。
自動テストを作成する際に、テスト対象のソフトウェアシステムの構造を完全にコピーすべきですか?
いいえ、自動テストの構造はテストのしやすさに焦点を当てるべきであり、アプリケーションのアーキテクチャを正確に複製するべきではありません。
あるチームでは、自動テストを1人の人間が書き、テストは1つのファイルにあり、それぞれのテストが前のステップをコピーしていました。インターフェースの更新時には、すべてのテストでバグを手動で修正していました。
長所:
短所:
別のチームでは、アーキテクチャテンプレートを導入しました(ステップ、ページ、テストの分離)。新しい社員はすぐに理解し、新しいテストを迅速に導入し、更新は1か所で行われました。
長所:
短所: