Apache Jmeter - 需要线程范围变量

Posted

技术标签:

【中文标题】Apache Jmeter - 需要线程范围变量【英文标题】:Apache Jmeter - need thread scope variables 【发布时间】:2016-03-28 16:25:37 【问题描述】:

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

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

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

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

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

提前致谢!

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

使用纪元时间 (ms) 并附加 UUI 值。这是解决方案,因为 epoch time 永远不会相同,如果同时发出两个事务,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())

【讨论】:

以上是关于Apache Jmeter - 需要线程范围变量的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter简单的操作数据库

jmeter如何并行执行多个线程组

jmeter快速入门

jmeter 跨线程组调用变量

JMeter 一个线程组的多个请求,怎么设置指定

jmeter 安装配置