1.跨线程组的意义
Jmeter中线程组是互不干扰的状态,为了方便管理,可以将单独的接口放到不同的线程组中。如:在登录接口下,添加Beanshell后置处理器 使用函数${__setProperty(key,value,true)}
将提取出来的token设置为全局变量,再使用${__P(key)}将 ${__setProperty(key,value,true)}的值拿出来再赋值,后续在其他线程组里面需要用到登录token的值就可以直接调用
方法:jmeter本身的内置函数${__setProperty(key,value,true)} 可以把某参数的值设置成jmeter本身的内置属性,是全局变量,各个线程都可调用。调用时,只需使用调用jmeter属性的函数${__P(key)}来调用相应的属性即可。
2.跨线程传递参数的步骤
-
首先使用json提取出token
- 添加Beanshell后置处理器
将获取到的变量值token,通过${__setProperty(key,value,true)} 函数将变量值通过BeanShell后置处理,传递到全局去
Parametres:传递需要操作的参数${token},json提取出来的token值,可不填
Script:${__setProperty(logintoken,${token},)}; 调用函数__setProperty,把Bean Shell PostProcessor中的参数Token的值赋值给logintoken,并设置logintoken为jmeter内置属性,全局变量,所有线程组可调用。
- 在另一个线程组里,使用${__P(key)}函数调用
4.需要勾选测试计划中的选项
3.${__setProperty()}函数介绍
该函数用来给JMeter属性设置值,默认返回值为空字符串,所以在函数在任何地方被调用是有效的
用法:
${__setProperty(key, value, True/False)}
key: 属性名, 必填
property value : 属性值,必填
True/False : 是否返回原始值,非必填,当设置为:true,将返回原始值
作用域:跨线程组调用, 可以在任意地方调用,但不能跟在import xxx 后面
备注:参数不用加双引号引用
5.${__P()}函数介绍
这个是简化搬的属性函数,旨在为用户在命令行使用属性定义。区别于__property函数,它不能有存储值的变量;如果没有提供默认值,默认为1,选择1的原因是它对常用的测试变量有效,例如:循环,线程数,ramp up.
${__p(key,value)}
key: 要检索的属性名,必填
value:默认为1,非必填
作用域:跨线程使用
注意:两个变量之间要用“,” 隔开,如果变量中包含转义,可用“\”