groovy - 为什么在 JSR223 PreProcessor 中替换 POST 参数会在后续迭代中将其删除?
问题描述
我正在使用带有以下代码的 JSR223 PreProcessor 更改几个 POST 请求值:
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
def length = 10 // the size of the random string
def pool = ['a'..'z', 'A'..'Z', 0..9, '-'].flatten() // generating pool
Random random = new Random(System.currentTimeMillis())
def randomChars = (0..9).collect { pool[random.nextInt(pool.size())] }
def randomString = randomChars.join()
Arguments arguments = sampler.getArguments();
for (int i=0;i<arguments.getArgumentCount();i++)
{
Argument argument = arguments.getArgument(i);
String name = argument.getName();
String value = argument.getValue();
if(name =="mainForm:firstName"){
sampler.getArguments().removeArgument("mainForm:firstName");
sampler.addArgument("mainForm:firstName",randomString);
log.info("Name is " + randomString);
}
if(name =="mainForm:covers:0:sumInsured"){
sampler.getArguments().removeArgument("mainForm:covers:0:sumInsured");
value = value.replace("\$","");
value = value.replace(",", "");
def val = Double.parseDouble(value);
val++;
sampler.addArgument("mainForm:covers:0:sumInsured","\$"+String.valueOf(val));
}
}
我可以看到第一次迭代的日志输出,但后续的没有任何迹象表明由于某种原因不再找到参数。
我将这个预处理器附加到它正在修改的 HTTP 请求上。
知道为什么它只运行一次吗?
我注意到 Arguments 的源代码中提到了 isRunningVersion() - 这是做什么的?
public void addArgument(Argument arg) {
TestElementProperty newArg = new TestElementProperty(arg.getName(), arg);
if (isRunningVersion()) {
this.setTemporary(newArg);
}
getArguments().addItem(newArg);
}
解决方案
尝试使用HTTPArgument而不是通用参数,例如:
sampler.addArgument(new HTTPArgument("mainForm:firstName",randomString));
还要检查jmeter.log文件中是否有任何可疑条目,并检查通过View Results Tree侦听器发送的内容。
另请注意,您可以完全不使用脚本来实现您的要求,请查看以下JMeter 函数:
- __RandomString() - 从给定的源字符生成给定长度的字符串
- __strReplace是String.replaceAll()函数的包装器
推荐阅读
- html - HTML 文件有时无法加载
- azure-devops - 如何触发一个特定的管道以触发与该管道应用程序相对应的更改?
- c# - EF Core 内部 .NET Framework 数据提供程序错误 3
- javascript - Vuejs 在 HTML 中渲染多余的空格
- api - 如何制作导入和导出 csv 文件的 API 服务?
- netsuite - 如何在一行上为客户列出我的销售代表?
- python - WebScraping A Table 不适用于 Python Beautiful Soup
- excel - Excel VBA使用另一个字段作为文件名将数据从表导出到文本文件
- flutter - Flutter 必须向 Text 小部件提供非空字符串
- amazon-web-services - DynamoDB 投影表达式 - 从子集合中选择属性