目的:
当前接口请求的参数依赖于其他请求,且两个请求不是在同一个线程组时就会用到该方法进行跨线程组传参。
实际使用场景:
多个线程组的请求都依赖登录接口,但是登录接口仅执行一次。
实现方法:
以下举例的有正则提取和jsonpath提取,实际都是将需要的数据提取出来,然后通过BeanShell PostProcesso,将提取的数据设置为全局变量,以供其他线程组共同使用。
1.正则提取多个参数
前后两个正则表达式应该都通俗易懂,各自取uid和sid字段的值;
中间的(.+?)为什么要这样写,因为试过这样 “uid”:“(.+?)”,“sid”:“(.+?)”,但是没法取到值,所以就把中间的值都取出来,然后舍弃。
模板则是取第一个跟第三个的参数
提取后的参数是以 参数变量名+_g1,_g2._g3…以此类推。
添加 BeanShell 后置处理,利用$__setProperty函数设置为全局变量
${__setProperty(ypcookie_uid,${yp_g1})};
${__setProperty(ypcookie_sid,${yp_g3})};
使用调试器查看设置的变量正常取值
2.jsonpath提取多个参数
${__setProperty(ypcookie_sid,${yp_sid},)};
${__setProperty(ypcookie_uid,${yp_uid},)};
3.其他线程组使用全局变量
有两个函数可使用1.${__P(变量名,)} 2.${__property(变量名,)}
4.注意事项
由于是跨线程组的传参依赖,有时候两个线程组执行的顺序是无法确定的,所以可能会出现依赖全局参数的请求先执行,导致引用值失败。
为了避免该情况,被依赖的线程组最好是setup线程组,或者在测试计划勾选“独立运行每个线程组(例如在一个组运行结束后启动下一个)”
确保被依赖的线程组可以先执行。