背景
最近做项目性能测试的时候,遇到了一个问题,就是测试的接口需要用到其他接口返回值,作为输入参数,比如cookie值和token值,还要一些其他的值。测试场景是20个人5秒内启动,之前的做法是把所有的接口放到一个线程组里面,导致的结果就是还没有走到要测试的接口,这个接口上面的依赖的接口就都挂了。
问题
怎么样才能做到其他接口 不挂,只要设置需要测试的接口 20 人 5秒内启动就可以了。
想到的解决问题就是,使用jmeter的setup 线程组,然后利用 把需要用到变量设置成全局变量,供后面的线程使用。
主要提取的有token值,cookie和上个接口返回的值。
1和3,其实很好解决,用正则表达式或者jason提取器提取后,设置成全局变量。主要是cookie怎么解决呢?线程组之间如何共享cookie?于是百度到了一个案例:https://blog.csdn.net/yuxuan6699/article/details/97889930,参考了该篇博客,我调通了单个线程的,他这个只适合单个用户的,但是多个用户就不适用了,因为setup设置为20人,cookie 最后取的是最后一个用户的值,这样下面的主线程,再设置20 人,就只能有一个会成功,其他都会是失败的(也不一定?只要caseid 不一样就可以了?用一个cookie 有可能是对的,变的可以单独提出来)。
升级:
我需要把配置参数的cookie 管理器,放到主线程中,然后其他的前置接口都放到setup线程组中,然后用一个cookie 管理器单独管理,
多用户,setup线程组和主线程都需要 设置计数器,setup设置计数器是为了 区别 不同的用户初始化后的变量。主线程是为了 获取 上面初始化的参数,不同的用户获取不同的参数,这样可以避免获取到重复的值。
cookie 获取样例:
其他资料:
jmeter 线程组的执行顺序
https://blog.csdn.net/liletong12_28/article/details/100915970
jmeter 设置全局变量:
https://blog.csdn.net/ezreal_tao/article/details/85166799
jmeter 其他支持
${__V(token_${id})} 获取token_1 token_2 的值,非全局变量
全局变量 ${__P(token_${id})}