暂时从JMeter HTTP请求中删除参数
我的场景是在循环中发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能有一些变量没有在这里设置,所以它们是空的,因此我想从HTTP请求中删除这个参数。我可以用下面的代码成功地做到这一点。但是,在以后的循环迭代中,这个变量现在可以有一个值,我想包括我之前删除的参数。所以我的问题是,如何从HTTP请求中临时删除参数 我有一份JMeter测试计划摘录,根据:暂时从JMeter HTTP请求中删除参数,jmeter,Jmeter,我的场景是在循环中发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能有一些变量没有在这里设置,所以它们是空的,因此我想从HTTP请求中删除这个参数。我可以用下面的代码成功地做到这一点。但是,在以后的循环迭代中,这个变量现在可以有一个值,我想包括我之前删除的参数。所以我的问题是,如何从HTTP请求中临时删除参数 我有一份JMeter测试计划摘录,根据: While控制器 一些逻辑 HTTP请求 JSR223预处理器(groovy) 我的HTTP请求具有以下参数
- While控制器
- 一些逻辑
- HTTP请求
- JSR223预处理器(groovy)
for (Iterator iterator = sampler.getArguments().iterator();
prop = iterator.next();
String value = prop.getStringValue();
if (value.contains('\${')) {
iterator.remove();
}
}
${A}
变量-inputA
参数将发送一个空值,这些参数将被行为良好的应用程序忽略。请参阅一系列指南以开始使用JMeter函数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());
}
}
此问题的解决方案可能是克隆sampler Arguments对象并将其设置为sampler
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();
}
}
不幸的是,对于(1),应用程序实际上并不忽略空白值。至于(2)和(3),问题仍然是,一旦我删除了参数,我就不能在以后的循环中使用它。假设我将在循环上迭代2次。第一次vars.get(“A”)=null时,我将删除该参数。第二次vars.get(“A”)=foo,现在我无法应用此值。至于(3),使用这段代码,我将运行java.util.ConcurrentModificationException。在修改参数之前,也许我可以将它们保存在bsh.shared中,然后在后处理器中重新设置。下一步我会尝试。然后转到另一种方法:在没有任何参数的情况下生成空白请求,如果相关的变量值存在,则有条件地添加参数。我错过什么了吗?实际上,我正在使用CSV中的参数运行api测试,我的目标是在参数的值为空字符串时为参数提供空字符串,并在提供类似“nullValue”的字符串时删除参数。JSON主体{“ID”:“nullValue”}脚本:for(迭代器迭代器=sampler.getArguments().Iterator();prop=Iterator.next();String value=prop.getStringValue();if(value.contains('nullValue')){Iterator.remove();}