テスト環境は、自動テストプロセスの重要な要素です。これにより、自動テストを実行し、開発の初期段階でバグを発見するための安定したプラットフォームが提供されます。
問題の歴史:
初期のテストアプローチでは、手動で環境を設定する必要があり、結果が予測できないものでした。自動化の進展により、テストインフラストラクチャー(物理的なもの:マシン、ネットワーク、およびソフトウェア的なもの:設定、データベース、サービスのバージョン)に対する標準化と管理の必要性が生まれました。
問題点:
主な課題は以下の通りです:
解決策:
コンテナ化(Docker)、オーケストレーション(Kubernetes)、およびインフラストラクチャをコードとして扱う(Terraform、Ansible)技術を使用すると、必要な環境を迅速に立ち上げることができ、テストデータの設定も予測可能になり、スケーラビリティが向上します。CI/CDの連携により、各ビルドのために環境を自動的にデプロイし、変更をすぐにテストできます。
主な特徴:
最大限のリアリズムを求めて、自動テストを本番環境で実行することはできますか?
いいえ、これは望ましくありません。本番環境でテストを実行すると、実際のデータが損なわれ、ユーザーの操作に支障をきたす可能性があります。自動テストでは、主要サービスのコピーと管理されたデータを使用する別々の環境が利用されます。
すべてのチームにとって、1つのテスト環境で十分ですか?
いいえ。複数のチームが同時に作業を行うと、テストデータやサービスが競合する可能性があります。個別のスタンドを設けるか、各実行のためのデータのクリーニングと初期化のメカニズムを実装する方が良いです。
テスト環境は本番環境と完全に一致することが多いですか?
実際には、リソース、ライセンス、またはセキュリティの制限により、必ずしもそうではありません。テスト環境と本番環境の間に重要な違いがあると、自動テストは効果を失い、"偽の"安定性を示すことになります。
すべての自動化テストが1つの静的なテストサーバーを使用し、異なるチームのテストが同時に実行されるため、定期的に故障します。実際のバグは再現されず、環境の違いから新たなバグが発生しています。
利点:
欠点:
各プルリクエストが自動的に隔離された環境(Docker Composeとクラウドを用いて)にデプロイされ、テスト後に自動的に環境が消去されます。
利点:
欠点: