JMeter:几个采样器之间的相同UUID

JMeter: the same UUID between several samplers

具有多个 HTTP 请求的 Jmeter 线程组如何为每个线程使用相同的 UUID 值?

我尝试使用 ${__UUID} 创建 'user defined variables' 元素,使用 vars.put("uuid", UUID.randomUUID().toString()) 创建 java 预处理器; (独立)

但同一线程中的每个 http 请求都使用自己的 UUID。

将 java 预处理器作为第一个 HTTP Request(开始会话)的 child 移动,然后将其称为 ${uuid}请求只获取一个 UUID 值。

另一个没有代码的选项:添加用户参数作为第一个HTTP Request(启动会话)的预处理器,名称为uuid2,值${__UUID()} 并且您可以使用 ${uuid2} 来仅获取一个 UUID 值。

JMeter 变量对于每个线程都是本地的和独立的(有关详细信息,请参阅 ThreadLocal 概念)因此,为了创建一个随机的 GUID 结构,您需要:

  • 只执行一次这个函数(可选,但很高兴有)。例如,可以使用 If Controller 并将条件设置为类似以下内容来完成:

    ${__groovy(ctx.getThreadNum() == 0 && vars.getIteration() == 1)} 
    
  • 使函数执行结果对所有 JMeter 线程可用。有多种方法,最简单的是通过 setProperty() function
  • 将其转换为 JMeter 属性
  • 在需要的地方将使用__P() function生成的GUID引用为${__P(uuid,)}

这样您就可以从不同的线程甚至线程组访问相同的 GUID 值。

演示:

您不能重复使用生成的 ${__UUID},但您始终可以通过 JavaScript 函数生成它(它允许重复使用结果): ${__javaScript(function s4(){return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);} s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();, var_for_reuse)}