2

ForEachコントローラー内でJava リクエスト サンプラーを使用しようとしています。

これは私のカスタムサンプラーです

public class ClientSampler extends AbstractJavaSamplerClient {

    String Name;

    @Override
    public Arguments getDefaultParameters() {
        Arguments defaultParameters = new Arguments();
        defaultParameters.addArgument("name", "Tarek");
        return defaultParameters;
    }

    @Override
    public void setupTest(JavaSamplerContext context) {
        Name = context.getParameter("name");
    }

    @Override
    public SampleResult runTest(JavaSamplerContext context) {   
        System.out.println(Name);
    }
}

Jmeter では、5 つの変数を使用してユーザー定義変数を作成します。

ここに画像の説明を入力

そしてForEach Controller :

ここに画像の説明を入力

次に、Java リクエストをとして ForEach コントローラーに追加しました。

ここに画像の説明を入力

テスト計画は次のとおりです。

ここに画像の説明を入力

テストを開始すると、出力は次のようになります。

first
first
first
first
first

期待される:

first
second
third
fourth
fifth

ForEach コントローラーで開始インデックスと終了インデックスを設定しても、結果は同じです。

ForEach コントローラー内で http サンプラーを使用するとうまく機能しますが、Java 要求を使用すると、結果が期待どおりになりません。

この出力が得られる理由を誰か説明できますか?

4

1 に答える 1

4

私はそれを解決しました。

問題は、それがどのように機能するかを誤解したためです。

Jmeter はSetupTest(JavaSamplerContext context)、テストが開始される前に 1 回呼び出しrunTest(JavaSamplerContext context)、各ループで呼び出します (ただし、各ループの開始時に SetupTest も呼び出します)。

だから私はちょうど追加しました

Name = context.getParameter("name");

runTest 内で実行すると、結果はまさに本来あるべき状態になります。

@Override
public SampleResult runTest(JavaSamplerContext context) {   
    Name = context.getParameter("name");        
    System.out.println(Name);
}
于 2013-08-26T12:27:44.750 に答える