在 Jmeter 中,变量值被下一个线程值覆盖

In Jmeter variable value is getting overridden with next thread value

我正在研究 JMeter 测试计划,该计划旨在对 Web 服务进行性能测试。整个测试计划的主要部分包括两个步骤。

  1. 创建其中一个资产 ID(通过 Post-请求)- 通过 JSON 提取器提取资产 ID 并使用 bean shell 断言 ${__setProperty 设置变量(assetId,${assetId})}
  2. 按 ID 删除创建的资产(删除请求)- ${__property(assetId)}

如果我使用单线程计划,一切都会按预期进行,但一旦我使用多个线程,assetId 将具有最后一个线程值,剩余的值将被遗漏。你能告诉我如何 access/store 删除调用中的所有 assetId

Properties are not the same as variables. Variables are local to a thread; properties are common to all threads, and need to be referenced using the __P or __property function.

您应该使用 JSON 提取器的变量名称而不是创建 属性 以避免在线程之间共享变量。

您正在通过每个连续的线程覆盖相同的 属性,您需要执行以下操作:

  1. 在第一步中将您的代码更改为:

    props.put("assetId_" + ctx.getThreadNum(), vars.get("assetId"));
    
  2. 第二步使用__groovy() function读取属性值:

    ${__groovy(props.get("assetId_" + ctx.getThreadNum()),)}
    

另请注意 starting from JMeter 3.1 you're supposed to be using JSR223 Test Elements and Groovy language for scripting so consider migrating to JSR223 Assertion with Groovy