2017-05-05 7 views
2

私はこの質問がちょっと主観的だと知っていますが、私はここで何をすべきか迷っています。現時点では、いくつかのマイクロサービスを書くためにGo + Go-kitを使用しています。これらのマイクロサービスのエンドポイントを統合テストタイプの方法でテストしたいと思いますが、その方法についてはわかりません。私が考えることができるのは、エンドポイントにヒットし、応答をチェックするシェルスクリプトを用意することだけです。しかし、これはクルージュのように思え、実際のスマートな練習ではありません。私はこれを行うより良い方法があるべきであるように感じる。誰にも何か提案はありますか?マイクロサービスをテストしますか?

+0

質問は広範に見えます。最初にいくつかの研究をしてから具体的な質問に戻る必要があるようです。 [This](https://martinfowler.com/articles/microservice-testing/)は良いスタートかもしれません。 –

答えて

0

エンドツーエンド試験の別のアプローチは、Consumer-Driven Contract(CDC)です。消費者サービスプロバイダのサービスを開始する方法を知っている必要があります

  • :一部のエンド・ツー・エンドのテストを持っていることが有用であるが

    、彼らはのようないくつかの欠点があります。これは不必要な情報のように思えますが、サービスの数が増え始めると維持が困難になる可能性があります。

  • サービスの起動が遅くなる可能性があります。たとえ数秒しか話していなくても、これは時間を増やすためのオーバーヘッドを追加することです。コンシューマが複数のサービスに依存している場合、これはすべて追加され始めます。

  • プロバイダサービスは、期待どおりに動作するデータストアやその他のサービスに依存する場合があります。これは、プロバイダが開始されるだけでなく、いくつかの他のサービス、おそらくデータベースであることを意味します。

CDCのアイデアは、まもなくのように説明されています

  1. 消費者は、それは、プロバイダと消費者がこの契約に同意したサービス
  2. に固有の要求から期待するものを定義し
  3. プロバイダが契約が満たされていることを継続的に確認する

この情報はhere。このarticleの詳細は、Java固有のものであっても役に立ちます。

0

これは、httptestパッケージを使用して標準Goユニットテストで実行できます。これにより、またはHandleFuncに渡すことができるモックRequestおよびResponseWriterオブジェクトを作成できます。適切なRequestを作成し、それをハンドラに渡してから、ResponseRecorderから応答を読み取り、期待される応答と照合します。

デフォルトのマルチプレクサ(ハンドラを登録するためにhttp.Handle()を呼び出す)を使用している場合は、http.DefaultServeMuxに対してテストできます。私は過去にマイクロサービスのために使ってきました。ハンドラ、ルーティング、およびミドルウェアのベンチマーク処理にも使用できます。

0

golangのネイティブunit testing frameworkを使用して、個々のサービスをテストする必要があります(シェルスクリプトは使用しないでください)。 httptestはうまくいくようですが、より細かいテスト境界を持つことが有益であると主張します。実際にコードの各機能ブロックに対して1つの_test.goが必要です。より小さなテストは維持しやすくなります。

複数のマイクロサービスを含む総合的な統合テストでは、開発時に行うべきではありません。ステージング領域を設定し、その上でテストを実行します。

私の2セント。

関連する問題