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 控制器

在此处输入图像描述

然后将 java 请求作为项添加到 ForEach 控制器:

在此处输入图像描述

测试计划如下:

在此处输入图像描述

当我开始测试时,输出是:

first
first
first
first
first

预期的:

first
second
third
fourth
fifth

即使我在 ForEach 控制器中设置了开始和结束索引,结果也是一样的。

在 ForEach 控制器中使用 http 采样器效果很好,但是当使用 Java 请求时,结果与预期不同。

谁能解释我为什么得到这个输出?

4

1 回答 1

4

我解决了。

问题是因为我误解了它的工作原理:

SetupTest(JavaSamplerContext context)Jmeter在测试开始之前调用一次并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 回答