7 - Jmeter系列-2-跨线程组调用token
Jmeter线程组之间是相互独立的,各线程组之间互不影响,想要在不同线程组中使用同一token,方法是将token设置为全局变量。
Jmeter的内置函数中:“__setProperty”函数可以把某参数的值设置成Jmeter的内置属性,也就是全局变量,各个线程组之间调用时,使用Jmeter属性的函数“__property”来调用相应的属性即可。
一、准备接口:2个线程组,一个线程组放置登录接口,另外一个线程组放置其它需要用到token的接口
二、登录并获取token
1、HTTP请求默认值:
2、登录接口:
3、JSON提取器来提取token:
三、把token设置为全局变量
1、给登录接口所在线程组添加BeanShell取样器,把取到的token变为全局变量:
2、其中的token是在json提取器里面提取出来的token取的名字;autel-token是全局变量的名字
3、脚本的意思是:把token赋值给autel-token这个全局变量
4、把这句复制进脚本就可以了:
“${__setProperty(autel-token,${token},)}”
1)其中__setProperty是全局属性,前边是两个杠 “_”
2)如果有多个全局变量,就可以把上边的语句复制多份,用英文分号分隔
四、应用:
1、当前线程计划下,添加HTTP信息头管理器
1)这个信息头管理器在当前测试计划里面,当前测试计划的所有线程组外面:
2)这样的信息头管理器不属于任何一个具体的线程组,而是属于当前线程计划下的所有线程组,所有线程组都能用
3)公共的请求头信息都可以放在这里面,其中包含token、content-type等
4)取全局变量autel-token的值:
${__P(autel-token)}
注意:前边的“_”是两个,autel-token是全局变量的名字
2、具体线程组里面添加HTTP信息头管理器:这个信息头里面的信息,不是所有线程组公用的,只适用于部分接口请求,所以,就在当前线程组下又添加了信息头管理器
3、上面所有的都设置完以后,我们就可以添加http请求,把接口地址和参数相关配置上
4、具体线程组上,右键添加固定定时器:
1)定时器添加在当前线程组下,是为了有个等待时间,因为脚本运行的很快,取到token以后,有可能还没反应过来就直接运行下个接口了,会导致有的接口没有拿到token而导致运行失败,所以等待一会相对可靠
2)定时器的作用域:当前定时器脚本是添加在具体线程组下的,也就意味着,当前定时器的作用域是这整个线程组,这个线程组里边的每个接口在运行之前都会先运行这个定时器,也就是每个接口运行之前都会等待2S。
五、整个脚本的结构: