在Jmeter中的ForEach控制器中使用Java Request Sampler

时间:2013-08-26 12:20:42

标签: foreach jmeter

我正在尝试在 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个变量创建用户定义变量

enter image description here

ForEach控制器

enter image description here

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

enter image description here

测试计划如下:

enter image description here

当我开始测试时输出为:

first
first
first
first
first

预期:

first
second
third
fourth
fifth

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

在ForEach控制器中使用http采样器工作得很好,但在使用Java请求时,结果不符合预期。

任何人都能解释为什么我会得到这个输出吗?

1 个答案:

答案 0 :(得分:4)

我解决了。

问题是因为我误解了它的运作方式:

Jmeter在测试开始前调用SetupTest(JavaSamplerContext context)一次,并在每个循环中调用runTest(JavaSamplerContext context)(尽管它在每个循环开始时也调用了SetupTest)。

所以我刚刚添加了

Name = context.getParameter("name");

在runTest内部,现在结果正好如此。

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