Groovy 为什么在JSR223预处理器中替换POST参数会使其在后续迭代中被删除?

Groovy 为什么在JSR223预处理器中替换POST参数会使其在后续迭代中被删除?,groovy,jmeter,jsr223,Groovy,Jmeter,Jsr223,我正在使用JSR223预处理器和以下代码更改几个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 r

我正在使用JSR223预处理器和以下代码更改几个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)); 
    }
}
尝试使用以下参数代替常规参数:

sampler.addArgument(new HTTPArgument("mainForm:firstName",randomString));
还要检查jmeter.log文件中是否有任何可疑条目,并检查通过侦听器发送的内容

另外,请注意,您完全不需要使用脚本就可以实现您的需求,请查看以下内容:

  • -从给定的源字符生成给定长度的字符串
  • 哪一个是包装函数
    • 谢谢迪米特里, 事实证明,最简单的解决方案是就地修改参数,而不是试图替换它:

      argument.setValue(randomString);
      
      argument.setValue(randomString);