循环中JMeter ${__UUID}的不同值

13

在我的BSF预处理器(使用JavaScript语言),我正在生成诸如以下内容的后置数据:

 var totalCustomer = 2;
 var data = { "customers": [] };
 for(i=1; i<=totalCustomer; i++){

     // in all iteration getting same value for ${__UUID} 

     var customer = {
         "id": "${__UUID}"
     }
     data.customers.push(customer);
 }
 vars.putObject("data",JSON.stringify(data));

我猜它会被编译一次,然后在后续的迭代中查找值。

有没有办法在每次迭代中使用${__UUID}生成不同的guid


你好,有没有对答案的任何反馈?谢谢。 - UBIK LOAD PACK
3个回答

6
  1. ${__UUID}替换为UUID.randomUUID().toString()。不要将JMeter变量和函数嵌入脚本中,这不是很好的实践方法,可能会导致意外行为(就像在您的情况下一样)。特别是对于您的场景,最好直接调用UUID类方法。
  2. 不要使用BSF测试元素,它们在性能方面效率不高。考虑使用JSR223测试元素和Groovy语言。请参阅Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!以获取说明、基准测试、Groovy引擎安装详细信息和脚本编写最佳实践。

3
除了性能方面的问题以外,当BSF预处理器使用JavaScript语言时,可以使用UUID.randomUUID().toString()吗?虽然可以使用${__BeanShell(UUID.randomUUID().toString())},但这与使用${__UUID}相同。 - Sami
我完全不明白这个答案。我正在使用 HTTP 请求,并已将 ${euid} 替换为 UUID.randomUUID().toString(),但它只是报错,实际上什么都没做。 我已经将 euid 配置为用户定义变量。我在这里做错了什么? - esaruoho

6
你可以使用“参数”字段传递 ${__UUID}。
然后在你的代码中使用:

bsh.args[0]

例子:

enter image description here

这是在 While 控制器或 Loop 控制器中使用 PreProcessor 时的情况。
但如果你在谈论包含循环的 Beanshell 代码,那么只需执行以下操作:

UUID.randomUUID().toString()

当然,确保你导入了这个类:

import java.util.UUID;


如果您循环执行例如for(i=0;i<2;i++){log.error("Test:" + bsh.args[0])},则每个循环都会产生相同的UUID。 - Sami

6
使用Java语言编写JSR223前置处理器以生成UUID
vars.put("myUUID",UUID.randomUUID().toString());

在你的 Javascript JSR223 预处理器中访问它。
var customer = {
     "id": "${myUUID}"
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接