DUICUO

オープンソース プロジェクトで統合テストを実行する方法を学びましたか?

友人から統合テストのやり方を聞かれたので、今日はオープンソース プロジェクトで統合テストがどのように行われるかに焦点を当てます。

通常、外部にサービスを提供するオープンソース プロジェクトでは、統合テストが必要です。

  • パルサー
  • カフカ
  • Dubboら

ネイティブ ライブラリのみを提供するプロジェクトでは、通常、ユニット テストの記述のみが必要です。

  • フートゥール
  • アパッチコモンズ

私の経験に基づくと、サービス指向アプリケーションは主に Java アプリケーションと Golang アプリケーションの 2 つのカテゴリに分類されます。

🐳Go言語

Golang のツールチェーンは Java ほど強力ではないため、統合テスト機能のほとんどは Makefile とシェル スクリプトを記述することによって実装されます。

私がよく知っているPulsarのgo-clientを例に挙げてみましょう。GitHub上の統合テストは、以下のように定義されたGitHubアクションによって実行されます。

写真

最終的に、Makefile 内の `test` コマンドが呼び出され、テスト対象の Golang バージョンが渡されます。

写真

Dockerfile :

写真

簡単に言えば、このイメージは Pulsar イメージ (Pulsar サーバーを含む) をベース イメージとして使用し、pulsar-client-go コードをそこにコピーしてコンパイルします。

次に以下を実行します:

 cd /pulsar/pulsar-client-go && ./scripts/run-ci.sh

つまり、テスト スクリプトです。

写真

テスト スクリプトのロジックも非常にシンプルです。

  • Pulsarサーバーを起動する
  • すべてのテスト コードが同じアドレスを使用してサーバーに接続するため、テスト コードは実行されます。   localhostなのでそのまま接続できます。

写真

ここでのアクション ログを使用すると、実行中のすべてのイベントを追跡できます。

☕Java

強力なツールチェーンのおかげで、Java 統合テストでは Makefile やスクリプトを使用する必要はほとんどありません。

再び Pulsar を例に挙げると、その統合テストでは、テスト コードを実行する前にローカルでサーバーの起動をシミュレートする必要があります。

これの利点は、ユニット テストをローカルで直接実行できることです。一方、Go コードでは最初にローカルでサーバーを起動する必要があり、テストがより面倒になります。

実装方法を見てみましょう。BrokerClientIntegrationTest の例の1つを使用します。

写真

写真

ユニット テストが開始されると、最初にサーバーが起動します。

写真

最終的には、`PulsarTestContext` の `build` 関数を呼び出してブローカー (サーバー) を起動し、`mvn` を使用してユニットテストの実行を自動的に行うことができます。

写真

ただし、各ユニット テストではサーバーの起動と停止が必要なので、通常、Pulsar のすべてのユニット テストを実行するには 1 ~ 2 時間かかります。

したがって、これらの統合テストでは、基本的に、最初にテスト環境を構築し、次に対応するテスト コードを実行します。また、後で実践的なデモンストレーションのために、CIM に統合テストを追加する予定です。