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 - 需要线程范围变量的主要内容,如果未能解决你的问题,请参考以下文章