jmeterダボインターフェイステスト

序文

最近、DubboサービスとPrometheusのモニタリング統合を行っていますが、Dubbo RPCコールに対するモニタリングコンポーネントのパフォーマンスへの影響をテストするには、追加の前後にパフォーマンステストを行う必要があります。統合されたDubboサービステストプラットフォームは以前にグループ用に構築されましたが、パフォーマンステストには使用できません。

パフォーマンステストといえば、wrk、JMeterなど、多くのオプションがあります。しかし、私は一般的に誰もがHTTPインターフェイスのテストに使用されていると思いますDubboフレームワークのこのプライベートプロトコルではdubbo://、これらのツールはネイティブサポートを提供していません。最初のアイデアは、ダボの汎化呼び出しによってクライアントを記述し、テスト結果をカウントすることですが、これは洗練されておらず、もう1つは、ホイールを繰り返して時間を無駄にすることができるということです。いくつかのグーグルの後、私は本当に私が望んだ答えを得ました。

今日は、ダボコミュニティからJMeterプラグインjmeter-plugins-for-apache-dubboを紹介します。このプラグインを使用して、JMeterにDubboサービスをテストさせることができます。

この記事は、読者が単純なパフォーマンステストにjmeterを使用し、jmeterをインストールしていることを前提としています。

テキスト

ステップ1:Dubboプラグインをインストールする

  1. プロジェクトのクローンを作成します。git clone https://github.com/thubbo/jmeter-plugins-for-apache-dubbo.git

  2. プロジェクトをパッケージ化し、JMeterプラグインをビルドします。mvn clean install

    または、上記の2つの手順をスキップして、jmeter-plugins-dubbo-2.7.3-jar-with-dependencies.jarをダウンロードすることもできます。 

  3. プラグインを追加します  ${JMETER_HOME}\lib\ext(インストール後にjmeterを再起動します)

image.png

image.png

 

ステップ2:JMeterスクリプトを作成する

1.ダボサンプルを作成する

[テスト計画]エリアの[スレッドグループ]を右クリックし、[追加]> [サンプラー]> [ダボサンプル]を選択します。

image.png

image.png

 

レジストリアドレス、サービスインターフェイス名(Javaインターフェイスクラス名)、メソッド名、パラメータータイプ、およびパラメーター値を[ダボサンプル]ダイアログボックスで構成します。

構成手順は次のとおりです。

  • 登録センターを構成します。通常はZooKeeperを使用します。(設定が完了したら、上のGet Provider List ボタンをクリックして登録済みサービスのリスト取得します)

    • [プロトコル]を選択した場合は  zookeeper、ZooKeeperアドレスを入力します。
    • 通常、実稼働環境に複数のZooKeeperノードが含まれている場合は、複数のZooKeeperアドレスを入力して、それらをコンマ(、)で区切ることができます。
    • 単一サーバーでテストする場合は、[プロトコル] none選択  し、ダボサービスアドレスを[アドレス]に入力します。
  • グループ、バージョン、コールタイムアウトタイムアウト(デフォルトは1秒)など、必要に応じてサービスコール構成を調整します。

  • Dubboサービスの完全なJavaインターフェースクラス名とメソッド名を設定します。

  • 各パラメータのパラメータタイプとパラメータ値を設定します。

    • パラメータタイプ:基本タイプ(boolean、intなど)はタイプ名を直接書き込み、他のタイプは完全なJavaクラス名を書き込みます(完全なクラス名であることに注意してください)。
    • パラメーター値:基本タイプと文字列はパラメーター値を直接書き込み、複合タイプはJSONで埋められます。

image.png

image.png

 

テストスクリプトのローカルデバッグを容易にするには、構造リスナーを追加し、[スレッドグループ]を右クリックして、[追加]> [リスナー]> [結果ツリーの表示]を選択し、結果ツリーの表示リスナーを追加します。

ステップ3:テストの実行

[スレッドグループ]を右クリックし、[確認]をクリックして、ツールとサービス間の接続をテストする単一の要求を実行します。

[結果ツリーの表示]タブで、期待どおりに返された[応答データ]を確認できます。これは、ダボコールが正常に実行できることを示しています。

image.png

image.png

 

ステップ4:アサーションを追加する

実行結果が成功を示しているのに、実際にはDubboサービス呼び出しが失敗したか、ビジネスプロセスが失敗し、返された結果にエラーコードが含まれている場合があります。たとえば、次の2つの画像。

RPC呼び出しが失敗しました。

image.png

image.png

 

ビジネス処理に失敗しました。

image.png

image.png

 

解決策:

このような問題については、アサーションを追加して、サービスが成功したかどうかを確認できます。汎化呼び出しの結果はJSONの形式で返され、アサーションを追加して返されたJSONデータをチェックして、サービスの実行が成功したかどうかをより正確に確認できます。

具体的な手順は、jmeterの[テスト計画]領域でダボサンプルを右クリックし、[追加]> [アサート]> [JSR233アサーション]を選択することです。

image.png

image.png

 

ここで私は私のグルーヴィーなテストスクリプトコードを与えます:

  1. 文字列respStr = null;
  2. Map <String、Object> resp = null;
  3. {を試す
  4. respStr = SampleResult.getResponseDataAsString();
  5. resp =(Map <String、Object>)com.alibaba.fastjson.JSON.parse(respStr);
  6. } キャッチ(Throwable ex){
  7. // パス
  8. log.error("エラー"、ex);
  9. }
  10. if(resp == null){
  11. AssertionResult.setFailure(true);
  12. AssertionResult.setFailureMessage("応答はJSONではありません:" + respStr);
  13. } その他{
  14. //単純なチェック:ダボの汎化呼び出しが失敗した場合、返されるJSONにはコードフィールドと詳細メッセージフィールドが含まれます。
  15. if(resp.get("code")!= null && resp.get("detailMessage")){
  16. AssertionResult.setFailure(true);
  17. AssertionResult.setFailureMessage("rpc exception、code =" + resp.get("code")+ "detailMessage =" + resp.get("detailMessage"));
  18. } else if(!"SUCCESS" .equals((String)resp.get("code"))){
  19. // TODOは、実際のビジネスに基づいてリクエストの成功を検証します。
  20. AssertionResult.setFailure(true);
  21. AssertionResult.setFailureMessage("Request failed、code =" + resp.get("code"));
  22. } その他{
  23. AssertionResult.setFailure(false);
  24. }
  25. }

image.png

image.png

 

アサーションを追加した後、結果を確認してみましょう。

image.png

image.png

 

ご覧のように、アサーションはビジネス検証で役割を果たし、エラーメッセージを表示しました。

スクリプトの他の部分の書き方については、JMeterの使い方の一部である、シミュレーションしたいシーンを想定して設定する必要があるため、ここでは詳しく説明しません。

よくある質問

プラグインに関してよくある質問については、プラグインのgithub wikiのFAQを参照してください

参考資料

おすすめ

転載: www.cnblogs.com/SunshineKimi/p/12717015.html