JMeter 中是不是有更多线程安全变量可用于 get() 和 set() 变量?
Posted
技术标签:
【中文标题】JMeter 中是不是有更多线程安全变量可用于 get() 和 set() 变量?【英文标题】: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”更多的线程安全变量?还是有其他方法可以防止这种情况发生?
【问题讨论】:
您好,对回答有任何反馈吗?如果可以,请接受并投票,以便其他用户可以信任它,谢谢 【参考方案1】:Vars 特定于 1 个线程(因此此处不需要线程安全),因此在核心 jmeter 中您所描述的不会发生。
如果某些 3rd 方插件发生这种情况,您应该向项目报告错误。
在出现问题时尝试进行线程转储以查看发生了什么
【讨论】:
【参考方案2】:根据Top 8 JMeter Java Classes You Should Be Using with Groovy 文章vars 代表JMeterVariables 类实例,它又属于JMeterContext
如果您查看JMeterContextService 类源代码,您会看到JMeterContext 被声明为ThreadLocal 和Thread-Local Storage Pattern 意味着其他线程无法访问这些变量。
所以我建议使用Debug Sampler 或Sample Variables 属性检查$response_url
的来源,因为问题很可能与使用Groovy 代码中的vars
简写无关(你是using Groovy,你不是吗?)
【讨论】:
以上是关于JMeter 中是不是有更多线程安全变量可用于 get() 和 set() 变量?的主要内容,如果未能解决你的问题,请参考以下文章