現在、機能を開発しているときはいつでも、ダウンストリームサービスのモックを使用して機能の動作テストを作成しています。これらのモックは、常に同じ出力を提供します。今日は重大な墓に直面した。私のBDDは、ローカルのビルド環境で使用されていました。したがって、私は先に進み、変更を「master」ブランチにマージしました。
しかし、私の開発環境で機能を手動でテストしているときに、バグを発見しました。ダウンストリームサービスの1つが4xxで応答していました。私はこれが悪いことを知っています-マスターブランチにはバグのある機能が含まれています。
実際のサービスを使用して統合テストを作成し、それを自分のビルドの一部にした場合、この問題は解決されたでしょう。しかし、ダウンストリームの1つがダウンした場合、ビルドは成功しません。これは欲しくない。
別のQAテスターがないため、QAブランチがないことに注意してください。すべての機能を自分でテストする必要があります。
この問題を軽減するにはどうすればよいですか?
スタブ/モック/偽物を使用したテストは優れていますが、実際のものが使用されるシステムおよび統合テストを完全に置き換えることはできません。
外部サービスを自動統合テストで確実に使用するための十分な制御がない場合は、手動の統合テストを実行する必要がありますbefore作業を「マスター」ブランチにマージして防止します今回の恥ずかしさ。
これらのエラーを以前にキャッチするためのもう1つの改善点(4xx応答がコードで行った変更によって引き起こされたと想定)は、外部サービスのモックをよりスマートにすることです。事前に構成されたデータを常に盲目的に提供する代わりに、モックは受信したリクエストが期待どおりかどうかを確認することもできます。リクエストが期待どおりでない場合は、テストケースが失敗しているはずです。
正しいリクエストが送信されたことを検証するテストは、実際の外部サービスとの統合テストの必要性を取り除きません。なぜなら、テストケースで書くものと実際のサービスが実装するものとの間で常に異なるAPIの解釈があり得るからです。 。
個別のQAがないことは非常に悪いことです。最も基本的なレベルでは、ソフトウェア開発者はソフトウェアがうまく機能することを実証するためにソフトウェアを機能させたいと思っており、QA担当者はソフトウェアが機能しないことを望んでいます機能しない彼らが良い仕事をしたことを示すために。両方を同時に行うことはできません。
依存しているアップストリームサービスのモックを作成する場合、限られた数のケースでサービスの動作を一致させます。
本番環境のサービスから4xxエラーが発生した場合、モックがサービスの実際の動作に対して正確でないか、上流のサービスが重大な変更を導入したことを意味します。
これを回避する最良の方法は、サービスのドキュメントをチェックアウトして、モックをより厳密に一致させることです。
OpenAPI仕様 のようなものを使用して、APIを文書化できます。
信頼性の低い外部システムとのインターフェースをとる統合テストが心配な場合は、外部テスト用の自動テストに個別のテスト段階を設けることができます。このフェーズが失敗した場合、これはビルド全体を失敗させないはずです(バグを示しているか、ダウンストリームシステムがダウンしていることを示している可能性があります)が、何か調査が必要であることを示しています。
これにはある程度の規律が必要ですdoこれらの問題を調査し、外部テストから同じレベルの安全性が得られなくなるため、モックを使用したテストが可能な限り良好であることを確認する必要があります。ビルドに失敗しないためですが、それはかなりうまく機能します。