【问题标题】:In Jmeter variable value is getting overridden with next thread value在 Jmeter 变量值被下一个线程值覆盖
【发布时间】:2021-11-27 12:03:46
【问题描述】:

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

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

如果我使用单线程计划,一切都会按预期进行,但是一旦我使用多个线程,assetId 将具有最后一个线程值,而剩余的值将被遗漏。请告诉我如何在删除调用中访问/存储所有assetId

【问题讨论】:

  • 请使用变量而不是属性。属性与所有线程共享。变量是线程本地的。

标签: performance jmeter beanshell jmeter-5.0


【解决方案1】:

属性与变量不同。变量是线程本地的;属性对所有线程都是通用的,需要使用__P或__property函数来引用。

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

【讨论】:

    【解决方案2】:

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

    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,因此请考虑迁移到JSR223 Assertion with Groovy

    【讨论】:

      猜你喜欢
      • 2022-11-04
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多