JMeterはスレッドグループ間で変数を渡します

このJMeterチュートリアルでは、スレッドグループ間で変数を共有および渡す方法について説明します。

高度なJMeterスクリプトを開発する場合、ほとんどの場合、複数のスレッドグループがあります。各スレッドグループは異なるリクエストを実行します。

この良い例は、ベアラートークンでユーザーを認証する必要がある場合です。 1つのスレッドグループが認証を行い、トークンを保存します。別のスレッドグループがこのトークンにアクセスして、別のリクエストで使用する必要があります。


したがって、スレッドグループ間で変数を渡すメカニズムが必要です。



JMeterのスレッドグループ間で変数を渡す

この例では、テストプランに2つのスレッドグループがあります。最初のスレッドグループは、Webサービスに対してGET要求を行います。次に、 JSONエクストラクタ JSON応答を解析するプラグイン。


JSONPathを使用して、特定のキーの値を抽出し、それをJMeter変数として保存します。

JMeterリクエストは次のようになります。

上記のリクエストの結果、JSON形式で次のレスポンスが生成されます。


最初のURLを抽出するJSONPathは次のようになります。

JSONPathクエリの値はfirst_urlとして保存されます。この変数は同じスレッドグループ内でのみアクセス可能であり、${first_url}を使用してその値を取得できます。では、他のスレッドグループを介してこの変数にアクセスできるようにするにはどうすればよいでしょうか。


答えはBeanShell Assertionを使用することです変数をグローバルプロパティとして保存します。このようにして、スレッドグループ間で変数を渡すことができます。

BeanShellアサーションを追加するには、[テストプラン]> [追加]> [アサーション]> [BeanShellアサーション]を右クリックします。

BeanShellアサーションでは、次のコードを入力できます

${__setProperty(first_url, ${first_url})};


スレッドグループ2では、${__property(first_url)}を使用してこの変数に直接アクセスできます。以下に示すように:

または、BeanShell PreProcessorを使用できます変数を操作するには:


BeanShellプリプロセッサでは、props.get('name_of_variable')を使用して、別のスレッドグループから渡された変数にアクセスできます。次に、文字列操作を実行して、結果を新しい変数として保存できます。

上記の例では、http://を削除しますスレッドグループ1から渡された変数から、結果を変数hostとして保存します。

変数hostはスレッドグループ2に対してローカルになり、${host}を使用して直接アクセスします。以下に示すように: