我的场景是我在循环中发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能有变量,此时未设置,因此它们为null,因此我想从HTTP请求中删除该参数。我可以使用下面的代码成功完成。但是,在稍后的循环迭代中,此变量现在可以有一个值,我想包含我之前删除的参数。所以我的问题是,如何从HTTP请求中暂时删除参数?
我根据以下内容提供了JMeter测试计划摘录:
我的HTTP请求具有以下参数:
名称值
inputA $ {A}
inputB $ {B}
我的PreProcessor脚本如下所示:
for (Iterator iterator = sampler.getArguments().iterator();
prop = iterator.next();
String value = prop.getStringValue();
if (value.contains('\${')) {
iterator.remove();
}
}
答案 0 :(得分:1)
最快,最简单,最正确的解决方案是使用__evalVar() JMeter功能,如:
因此,如果未定义${A}
变量,则inputA
参数将以空值发送,并且行为良好的应用程序将忽略此类参数。请参阅How to Use JMeter Functions系列指南以开始使用JMeter函数
如果出于某种原因,第1点和第2点不适用,请输入正确的代码以完全删除参数:
import org.apache.jmeter.config.Arguments;
Arguments args = sampler.getArguments();
Iterator it = args.iterator();
while (it.hasNext()) {
def argument = it.next();
if (argument.getStringValue().contains('${')) {
args.removeArgument(argument.getName());
}
}
答案 1 :(得分:0)
此问题的解决方案可能是对采样器Arguments对象进行克隆并将其设置为采样器。
import org.apache.jmeter.config.Arguments;
Arguments arguments = sampler.getArguments().clone();
sampler.setArguments(arguments);
for (Iterator iterator = sampler.getArguments().iterator();
prop = iterator.next();
String value = prop.getStringValue();
if (value.contains('\${')) {
iterator.remove();
}
}