下面,咱们将看看如何在线程组之间共享和传递变量。面试
在开发高级JMeter脚本时,极可能您将拥有多个线程组。每一个线程组将执行不一样的请求。性能
一个很好的例子是咱们须要使用Bearer Tokens对用户进行身份验证。一个线程组执行身份验证并保存令牌。另外一个线程组须要访问此令牌并在另外一个请求中使用它。学习
所以,咱们须要一种在线程组之间传递变量的机制。测试
对于此示例,咱们的测试计划将具备两个线程组。第一个线程组向Web服务发出GET请求。而后,咱们使用JSON Extractor插件来解析JSON响应。网站
使用JSONPath,咱们提取特定键的值并将其保存为JMeter变量。url
这就是咱们的JMeter请求的样子:spa
上述请求的结果以JSON格式生成如下响应插件
和咱们的JSONPath提取第一个url看起来像线程
JSONPath查询的值保存为first_url
。此变量只能在同一个线程组中访问,咱们能够经过使用获取其值${first_url}
。如今,咱们如何经过其余线程组访问此变量?code
答案是用于BeanShell Assertion
将变量保存为全局属性。经过这种方式,咱们能够在线程组之间传递变量。
要添加BeanShell断言,请右键单击Test Plan> Add> Assertion> BeanShell Assertion
在咱们的BeanShell断言中,咱们能够输入如下代码
${__setProperty(first_url, ${first_url})};
如今在线程组2中,咱们可使用${__property(first_url)}
以下所示直接访问此变量:
若是对软件测试、接口测试、自动化测试、性能测试、LR脚本开发、面试经验交流。感兴趣能够175317069,群内会有不按期的发放免费的资料连接,这些资料都是从各个技术网站搜集、整理出来的,若是你有好的学习资料能够私聊发我,我会注明出处以后分享给你们。
或者,咱们可使用BeanShell PreProcessor来操做变量
在BeanShell PreProcessor中,咱们能够经过使用来访问从另外一个Thread组传入的变量props.get("name_of_variable")
。而后咱们能够执行一些String操做并将结果保存为新变量。
在上面的例子中,咱们http://
从Thread Group 1传递的变量中删除了,咱们将结果保存为变量host
。
该变量host
如今是线程组2的本地变量,并使用${host}
以下所示直接访问它: