循环中jmeter $ {__ UUID}的不同值

Sam*_*ami 5 guid jmeter

在我的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));
Run Code Online (Sandbox Code Playgroud)

我猜它只编译一次,然后在后续迭代中查找该值。

有没有什么办法可以产生不同的guid使用${__UUID}每次迭代?

Dmi*_*i T 6

  1. ${__UUID}用。。。来代替UUID.randomUUID().toString()。不要将 JMeter 变量和函数内联到脚本中,这不是很好的做法,并且可能会导致意外行为(如您的情况)。特别是对于您的场景,最好直接调用UUID类方法。
  2. 不要使用 BSF 测试元素,从性能方面来看它们不是很有效。考虑使用 JSR223 测试元素和 Groovy 语言。请参阅Beanshell、JSR223 与 Java JMeter 脚本:您一直在等待的性能提升!有关解释、基准测试、常规引擎安装详细信息和脚本编写最佳实践。

  • 不考虑2(我将深入研究性能方面),当BSF预处理器中的语言是javascript时,我可以使用`UUID.randomUUID().toString()`吗?我可以使用 `"${__BeanShell(UUID.randomUUID().toString()}"` 但与使用 `"${__UUID}"` 相同 (3认同)

UBI*_*ACK 6

您可以使用“参数”字段传递${__UUID}。

然后在您的代码中使用:

bsh.args[0]

例子:

在此输入图像描述

这是当您在 While 控制器或循环控制器中使用预处理器时。

但如果您正在谈论包含循环的 Beanshell 代码,那么只需执行以下操作:

UUID.randomUUID().toString()

当然确保你导入类:

导入java.util.UUID;


小智 6

使用java语言编写JSR223 PreProcessor生成UUID

vars.put("myUUID",UUID.randomUUID().toString());
Run Code Online (Sandbox Code Playgroud)

然后在 javascript JSR223 预处理器中访问它。

var customer = {
     "id": "${myUUID}"
 }
Run Code Online (Sandbox Code Playgroud)