3

JMeter を使用して SOAP Web サービスの負荷テストを行っています。Web サービスは、ローカルホスト、開発ボックス、統合ボックス、運用ボックスなど、さまざまな場所に存在します。

私は WebService(SOAP) リクエスト サンプラーを使用しており、「IP のサーバー名」、「パス」、および「SOAP アクション」パラメーターを次のように設定しています。

Server Name of IP: ${SERVER}
Path: ${PATH}/service
SOAPAction: http://${SERVER}${PATH}service#action

これは、「ユーザー定義変数」構成要素を使用する場合にうまく機能します。SERVER と PATH を、ヒットしようとしている場所に固有のものに変更するだけです。ただし、これはお尻の痛みであり、対処したいと思います。私がやりたかった (そして試した) ことは、スレッド グループに複数の If Logic Controller を追加し、${MODE} (別の UDV) をチェックし、それに応じて行動し、SERVER と PATH を設定することでした。だから、私は次のようなものを持っていました

"${MODE}" == "dev"
"${MODE}" == "local"
"${MODE}" == "production"

If Controller ごとに 1 つずつ、適切な SERVER と PATH を設定する子 UDV 要素がありました。If Controller が false を返すと仮定しても、最後の UDV からの値 (私のスレッド グループでの出現順) が常に使用されていたため、UDV は評価されませんでした。ただし、スレッドが開始される前に、場所に関係なく、すべての UDV が評価されることがドキュメントに記載されています。そのため、代わりに User Paramaters を使用してみましたが、SOAP サンプラーの ${SERVER} と ${PATH} の値が置き換えられず、http://${SERVER}${PATH} にリクエストを送信しています。良くない。

これを処理するエレガントな方法はありますか?現在、ヒットしているサーバーを変更する必要があるたびに、SERVER と PATH の値をコピーして貼り付けているだけです。テストをロードするサーバーごとに 1 つずつ、複数のテスト計画を作成することもできますが、新しいテストの追加、既存のテストの無効化、SOAP リクエストの一部の変更など、構造を頻繁に更新します。それらは良い解決策とは思えません。

何か助けはありますか?

4

2 に答える 2

4

この問題は、BeanShell Sampler とテストプラン自体で定義された変数で解決しました。

「ユーザー定義変数」要素を使用する代わりに、テストプラン全体の変数を定義できます。ツリーのルート要素をクリックして、内容が「dev」、「local」、または「production」の「mode」という変数を追加するだけです。

テストケースにサンプラー「Bean Shell Sampler」を追加し、次のコードを追加します。

if ("dev".equals(vars.get("mode"))) {
 vars.put("server","x.y.z");
}
if ("local".equals(vars.get("mode"))) {
 vars.put("server","127.0.0.1");
}
if ("production".equals(vars.get("mode"))) {
 vars.put("server","10.0.0.10");
}

その後、必要なすべての変数を定義し、必要に応じて他の環境を追加することもできます。

しかし、さらに一歩進めることもできます。単純なコントローラーを作成し、そこに Bean Shell Sampler を配置します。すべての ThreadGroup で、モジュール コントローラーを使用してこのシンプル コントローラーにアクセスできるようになりました。この場合、テストプラン全体に対して環境セレクターを 1 回だけ定義する必要があります。

于 2010-03-04T09:04:49.820 に答える
0

個人的には、複数の UDV モジュールをすべて最上位に配置する方がはるかに簡単であることがわかりました。

使用したいものを除いて、すべて無効のままにします。

同じことを行う方法がたくさんあることがわかります;-)

于 2015-06-22T21:04:35.987 に答える