Apache Jmeter - 需要线程范围变量

时间:2016-03-28 16:25:37

标签: websocket jmeter load-testing

我正在尝试运行websocket负载测试,并发现我需要访问在线程范围内定义的变量。

具体来说,我需要随机生成一个UUID作为伪用户ID。我们的API要求将其作为每个请求的参数传递:

使用UUID发送auth请求 - 这将创建一个键入系统信息的用户帐户 等待回应 循环使用UUID发送同步/初始化

UUID是应用ID。我可以通过UUID函数使用用户自定义变量轻松随机化,但是,用户定义的变量显然在测试开始时计算一次,而我需要在线程组范围生成它们。有没有办法做到这一点?如果现在,我怎么能实现这个目标?

换句话说,我需要为每个线程(充当用户)随机生成UUID,线程组中的每个采样器都可以访问它。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以使用Beanshell preprocessor作为第一个需要此UUID的采样器,如下所示。

vars.put("uuid", "${__UUID}");

用户/线程的线程组中的所有其他采样器将具有相同的UUID,并且可以使用${uuid}访问它。

答案 1 :(得分:0)

我在负载测试期间遇到过这个问题,解决方案是

使用纪元时间(ms)并附加UUI值。这是解决方案,因为纪元时间永远不会相同,如果同时发出两个事务,UUI每次都会更改。因此,无论何时运行测试,这些值都应该是唯一的。下面是参考代码

epoch Time:${__javaScript(Math.round(new Date().getTime()))}
UUID: ${__BeanShell(UUID.randomUUID().toString())}

Combination is :${__javaScript(Math.round(new Date().getTime()))}_${__BeanShell(UUID.randomUUID().toString())}