我正在尝试在 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请求时,结果不符合预期。
任何人都能解释为什么我会得到这个输出吗?
答案 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);
}