jmeter做接口测试过程中,经常遇到请求需要用到token的时候,我们可以把返回token的接口用后置处理器提取出来,但是在这种情况下,只能适用于当前的线程组,其他线程组无法引用到提取的token变量值,所以必须要生成全局变量让测试计划下的所有线程组都可以引用变量。
同一个线程组下提取token并引用
1、执行获取token接口(登录接口),在查看结果树这里,使用$符号提取token值
$.根节点
,$.data.token
表示提取根节点下的data节点下的token节点的值
2、使用json提取器,提取登录接口响应结果中的access_token,保存在变量token中
变量路径就是把在结果树提取的路径写上
3、可以使用调试取样器查看提取的token值是否正确
4、下一个接口(列表查询接口)中,需要使用上个登录接口返回的token值,使用${token}
引用
不同线程组下提取token并引用
1、使用json提取器提取登录接口响应结果中的access_token,保存在变量token中,操作与上文提到的一样。
2、使用函数助手对话框的setProperty函数,有两个输入框要填写(属性名称和Value of property),属性名称填写一个全局变量名,Value of property填写json提取器提取的access_token(json提取器提取到的access_token赋值给了变量token,此处引用变量${token}得到)
3、在json提取器下添加一个后置处理器BeanShell PostProcessor;
4、把生成的setProperty函数(${__setProperty(new_token,${token},)}
)复制到BeanShell PostProcessor中,此时已经把接口需要用到的access_token生成了并保存在全局变量new_token中。
5、引用该全局变量有两种方式
(1)使用函数助手中的property函数,只填写属性名称对应的输入框:全局变量名new_token
把生成的结果填写到列表查询接口需要引用的地方
(2)使用函数助手中的P函数,只填写属性名称对应的输入框:全局变量名new_token
把生成的结果填写到列表查询接口需要引用的地方
总结
${__setProperty()}
与${__property()}
/${__P()}
一起配合使用,setProptety等于把值拿出来, __property
/__P
对值进行使用
__P
是__property
函数的简化版,举个例子:${__P(prop1)}
会返回属性prop1的值;${__P(prop1,123)}
会返回属性prop1的值,如果prop1未定义值,则返回123;
__property
和__P
之间的区别:用法上__property
函数仅仅是比__P
函数多了一个可以存值的变量,举个__property
用法例子:${__property(pro,var,abcd)}
会返回pro的值,如果pro未定义值则会返回abcd,同时会将pro的值存到变量var中
注意事项
如果遇到跨线程组调用参数值不是token值而是变量名时且登录接口能够正常使用的情况下,请检查线程组设置
原因:如果不设置此项,会导致jmeter测试计划下所有添加的线程组同步运行,导致token还没获取出来就已经在调用了,导致获取值时出现错误
行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!