暂时从JMeter HTTP请求中移除参数
我的方案是我在循环内发送HTTP请求,其中参数值基于JMeter变量。当第一次进入循环时,我可能会有变量在这一点上没有设置,所以他们是空的,因此我想从HTTP请求中删除参数。我可以用下面的代码成功地做到这一点。然而,在稍后的循环迭代中,这个变量现在可以有一个值,我想包括我之前删除的参数。所以我的问题是,我如何暂时从我的HTTP请求中删除参数?暂时从JMeter HTTP请求中移除参数
我具有根据JMeter的测试计划提取物:
- 虽然控制器
- 一些逻辑
- HTTP请求
- JSR223预处理器(常规)
我的HTTP请求具有以下参数:
名称值
inputA $ {A}
inputB $ {B}
我的预处理器脚本的样子:
for (Iterator iterator = sampler.getArguments().iterator();
prop = iterator.next();
String value = prop.getStringValue();
if (value.contains('\${')) {
iterator.remove();
}
}
解决这个问题可能是使采样变元的克隆ts对象并将其设置为采样器。
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();
}
}
-
最快,最简单,恕我直言,正确的解决办法是使用__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),应用程序实际上不会忽略空白值。 )和(3),问题依然存在,一旦我删除了参数,我不能在循环的后面使用它,假设我将遍历循环2次第一次vars.get(“A”)= null,I将删除参数。第二次vars.get(“A”)= foo,现在我c不适用这个值。 至于(3),使用这段代码,我会遇到java.util.ConcurrentModificationException。 也许我可以在修改它们之前将参数保存在bsh.shared中,然后将它们放回到后处理器中。我会接下来尝试。 – SBGX
然后转到另一种方式:先创建没有参数的空请求,并在存在相关变量值的情况下有条件地添加参数。 –
我正在尝试使用一个简单的邮政调用您的解决方案,它并没有为我工作。我错过了什么吗?我实际上使用CSV参数运行api测试,我的目标是当它的值为空字符串和删除参数时提供空字符串参数,当我提供一个字符串像'nullValue'。 的JSON体 { “ID”: “NullValue属性” } 脚本: 为(迭代迭代= sampler.getArguments()迭代(); 丙= iterator.next(); 字符串值=道具。如果(value.contains('nullValue')){ iterator.remove(); } } – Razkar