在我写的PreProcessor中,我可以通过sampler成功更新GET查询字符串。
但是如果我在POST中使用相同的方法,而我可以通过getArguments()列出FORM字段,则不会设置该值。
Arguments arguments = sampler.getArguments();
for (int i=0; i<arguments.getArgumentCount(); i++) {
Argument argument = arguments.getArgument(i);
if (argument.getName().equals("page_submission_id")) {
String newVal = "8743718386872";
argument.setValue(newVal);
System.out.println("Setting arg["+argument.getName()+"] to["+newVal+"]");
}
}
sampler.setArguments(arguments);
printArgs(arguments);
此输出显示参数值未更改。
Setting arg[page_submission_id] to[8743718386872]
Arguments After
...
Found arg[page_submission_id] is[XXXXXXXXXXXXX]
...
进一步挖掘jmeter代码后,属性对象的“runningVersion”属性(通过isRunningVersion())设置为true。
我尝试了几种方法来解决这个问题:
有人能指出在发送之前设置POST FORM字段值的官方方式吗?
谢谢
答案 0 :(得分:0)
好吧,你为一个参数分配一个新值,但是我没有看到你在哪里更新了具有新值的参数的sampler&#s参数。
我非常相信KISS原则,所以我建议您按照以下步骤简化脚本,而不是添加更多行:
import org.apache.jmeter.config.Argument;
sampler.getArguments().removeArgument("page_submission_id");
sampler.addArgument("page_submission_id","8743718386872");
此外,我希望您使用JSR223 PreProcessor and Groovy language。
答案 1 :(得分:0)
我设法解决了这个问题:
(当我的设置更深入时,问题又回来了)通过添加新Argments对象的创建并插入(按相同顺序)新的Argument对象,其值设置为我需要的值。然后设置采样器以使用新的Arguments对象。
Arguments newArgs = new Arguments();
Arguments arguments = sampler.getArguments();
for (int i=0; i<arguments.getArgumentCount(); i++) {
Argument argument = arguments.getArgument(i);
HTTPArgument newArg = new HTTPArgument();
newArg.setName(arguments.getName());
if (arguments.getName().equals("field_to_replace")) {
newArg.setValue("new value");
}
else {
newArg.setValue(arguments.getValue());
}
newArgs.addArgument(newArg);
}
sampler.setArguments(newArgs);
我认为这是由“Argument.setValue()”使用的setProperty()中的“if(isRunningVersion())”测试,我正在绊倒。
虽然这似乎有效(对于我到目前为止的测试用例),但我很欣赏这可能不是正确的正式方法。