在 Jmeter 中,变量值被下一个线程值覆盖
In Jmeter variable value is getting overridden with next thread value
我正在研究 JMeter 测试计划,该计划旨在对 Web 服务进行性能测试。整个测试计划的主要部分包括两个步骤。
- 创建其中一个资产 ID(通过 Post-请求)- 通过 JSON 提取器提取资产 ID 并使用 bean shell 断言 ${__setProperty 设置变量(assetId,${assetId})}
- 按 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 提取器的变量名称而不是创建 属性 以避免在线程之间共享变量。
您正在通过每个连续的线程覆盖相同的 属性,您需要执行以下操作:
在第一步中将您的代码更改为:
props.put("assetId_" + ctx.getThreadNum(), vars.get("assetId"));
第二步使用__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。
我正在研究 JMeter 测试计划,该计划旨在对 Web 服务进行性能测试。整个测试计划的主要部分包括两个步骤。
- 创建其中一个资产 ID(通过 Post-请求)- 通过 JSON 提取器提取资产 ID 并使用 bean shell 断言 ${__setProperty 设置变量(assetId,${assetId})}
- 按 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 提取器的变量名称而不是创建 属性 以避免在线程之间共享变量。
您正在通过每个连续的线程覆盖相同的 属性,您需要执行以下操作:
在第一步中将您的代码更改为:
props.put("assetId_" + ctx.getThreadNum(), vars.get("assetId"));
第二步使用__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。