私はこの質問がちょっと主観的だと知っていますが、私はここで何をすべきか迷っています。現時点では、いくつかのマイクロサービスを書くためにGo + Go-kitを使用しています。これらのマイクロサービスのエンドポイントを統合テストタイプの方法でテストしたいと思いますが、その方法についてはわかりません。私が考えることができるのは、エンドポイントにヒットし、応答をチェックするシェルスクリプトを用意することだけです。しかし、これはクルージュのように思え、実際のスマートな練習ではありません。私はこれを行うより良い方法があるべきであるように感じる。誰にも何か提案はありますか?マイクロサービスをテストしますか?
答えて
エンドツーエンド試験の別のアプローチは、Consumer-Driven Contract(CDC)です。消費者サービスプロバイダのサービスを開始する方法を知っている必要があります
:一部のエンド・ツー・エンドのテストを持っていることが有用であるが
、彼らはのようないくつかの欠点があります。これは不必要な情報のように思えますが、サービスの数が増え始めると維持が困難になる可能性があります。
サービスの起動が遅くなる可能性があります。たとえ数秒しか話していなくても、これは時間を増やすためのオーバーヘッドを追加することです。コンシューマが複数のサービスに依存している場合、これはすべて追加され始めます。
プロバイダサービスは、期待どおりに動作するデータストアやその他のサービスに依存する場合があります。これは、プロバイダが開始されるだけでなく、いくつかの他のサービス、おそらくデータベースであることを意味します。
CDCのアイデアは、まもなくのように説明されています
- 消費者は、それは、プロバイダと消費者がこの契約に同意したサービス
- に固有の要求から期待するものを定義し
- プロバイダが契約が満たされていることを継続的に確認する
これは、httptestパッケージを使用して標準Goユニットテストで実行できます。これにより、またはHandleFunc
に渡すことができるモックRequest
およびResponseWriter
オブジェクトを作成できます。適切なRequest
を作成し、それをハンドラに渡してから、ResponseRecorder
から応答を読み取り、期待される応答と照合します。
デフォルトのマルチプレクサ(ハンドラを登録するためにhttp.Handle()
を呼び出す)を使用している場合は、http.DefaultServeMux
に対してテストできます。私は過去にマイクロサービスのために使ってきました。ハンドラ、ルーティング、およびミドルウェアのベンチマーク処理にも使用できます。
golangのネイティブunit testing frameworkを使用して、個々のサービスをテストする必要があります(シェルスクリプトは使用しないでください)。 httptestはうまくいくようですが、より細かいテスト境界を持つことが有益であると主張します。実際にコードの各機能ブロックに対して1つの_test.goが必要です。より小さなテストは維持しやすくなります。
複数のマイクロサービスを含む総合的な統合テストでは、開発時に行うべきではありません。ステージング領域を設定し、その上でテストを実行します。
私の2セント。
- 1. パラメーター・マイクロサービスを送信します。 Jhipster 4.6.2
- 2. Spring Cloudマイクロサービスは、他のマイクロサービスでパスワード保護されたマイクロサービスを使用します。
- 3. は、マルチモジュールとSpringマイクロサービスを区別しますか?
- 4. Azureサービスファブリックで(ステートフルな)マイクロサービスのアップグレードを実行しますか?
- 5. マイクロサービスは、redis pubsubからイベントをハンドリングしています
- 6. Asp.Netを使用したマイクロサービス
- 7. マイクロサービス:インスタンス単位またはマイクロサービス単位のデータソース?
- 8. NodeJSマイクロサービス
- 9. NGINX:proxy_passマイクロサービス
- 10. マイクロサービス渡しエンティティID GUIDまたはユニークコード
- 11. Dockerコンテナ内のマイクロサービスにアクセスしますか?
- 12. Zuulは、別のマイクロサービスの1か所でルーティングします
- 13. Spring Boot - マイクロサービスとは何が関係していますか?
- 14. マイクロサービス - マイクロサービス間の非同期呼び出しAMQP/RabbitMQベストパターン
- 15. 新しいマイクロサービスからLagomフレームワーク
- 16. モノリシックまたはマイクロサービスのコンセプト
- 17. さまざまなマイクロサービスをDockerとどのように接続しますか?
- 18. マイクロサービスとしてのユーザー
- 19. zuulプロキシを経由して1つのマイクロサービスから別のマイクロサービスにアクセスする方法
- 20. マイクロサービス - APIゲートウェイレイヤ
- 21. マイクロサービス/ RESTフォールトトレラントコミュニケーション
- 22. マイクロサービス:RESTとメッセージング
- 23. マイクロサービス構成サーバー
- 24. マイクロサービス通信
- 25. マイクロサービスとデータベース
- 26. GraphQLとマイクロサービス
- 27. マイクロサービス:データベースとマイクロサービスインスタンス
- 28. graphqlのマイクロサービス
- 29. ホテル通信マイクロサービス
- 30. マイクロサービスのアプリケーションマネージャ
質問は広範に見えます。最初にいくつかの研究をしてから具体的な質問に戻る必要があるようです。 [This](https://martinfowler.com/articles/microservice-testing/)は良いスタートかもしれません。 –