【问题标题】:Is there a more thread safe variable available in JMeter to get() and set() variables?JMeter 中是否有更多线程安全变量可用于 get() 和 set() 变量?
【发布时间】:2019-07-31 20:22:11
【问题描述】:

随着更激进的负载,我注意到 2 个或更多线程设置完全相同的变量值,从而导致使用所述值的后续请求失败。我正在使用 JSR223 PostProcessor,其中有以下代码:

URL url = new URL(vars.get("response_url"));
String path = url.getFile();
vars.put("request_path", path);

在检查请求时,我发现有时一个线程将“request_path”设置为“example1”,而另一个线程将该变量设置为完全相同的值。我不想减少线程数或加速时间;这不是一个选择。

在 JMeter 中获取/设置变量时,是否有比“vars”更多的线程安全变量?还是有其他方法可以防止这种情况发生?

【问题讨论】:

  • 您好,对回答有任何反馈吗?如果可以,请接受并投票,以便其他用户可以信任它,谢谢

标签: jmeter load-testing


【解决方案1】:

Vars 特定于 1 个线程(因此此处不需要线程安全),因此在核心 jmeter 中您所描述的不会发生。

如果某些 3rd 方插件发生这种情况,您应该向项目报告错误。

在出现问题时尝试进行线程转储以查看发生了什么

【讨论】:

    【解决方案2】:

    根据Top 8 JMeter Java Classes You Should Be Using with Groovy 文章vars 代表JMeterVariables 类实例,它又属于JMeterContext

    如果您查看JMeterContextService 类源代码,您会看到JMeterContext 被声明为ThreadLocalThread-Local Storage Pattern 意味着其他线程无法访问这些变量。

    所以我建议使用Debug SamplerSample Variables 属性检查${response_url} 的来源,因为问题很可能与使用Groovy 代码中的vars 简写无关(你是using Groovy,你不是吗?)

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多