Jmter实现跨线程组共享cookie
场景:
测试需要登录的接口时,只需要在一个线程组中添加http cookie管理器就可以实现。
此时进行压测,比如用户并发数100 ,相当于调用100次登录接口和100次需测试接口。但是在实际场景中,只需要调用1次登录接口,此时需要把登录和被测接口的线程分开,并实现多线程共享cookie。
解决方法
-
创建setup线程,添加登录的http请求、添加察看结果树,执行后在结果树中查看登录接口返回的cookie。返回形式有两种:Response headers、Response body。本文讲解返回的cookie在Response headers中。有些会用token ,返回在response body。
-
在登录的http请求下创建后置处理器- -正则表达式提取器,提取headers中的cookie信息。
引用名称: jsession
正则表达式: Set-Cookie:(.*)
模板: $ 1$
匹配数字: 1
缺省值: error
- 添加取样器-调试取样器,用于校验正则表达式取到的cookie是否正确。( 运行后可查看到)
- 确认cokkie取值正确后,在登录请求下添加后置处理--BeanShel后置处理程序。将cookie值改为全局量,如图。
格式: $ {_ setProperty(转换成全局变量后的引用名 ,${正则表达式定义的变量名},)}
- 以上完成登录的线程组后,添加第2个线程组,添加被测接口的http请求,添加配置元件-http信息头管理器,设置cookie的值: ${_ _property(JSESSIONID)。
这一步在其他教程上看到过是添加在http cookie管理器中,但是我没有实现。
- 设置登录的线程数1 ,需测试接[的线程数2 ,运行后可看到被测接口的Request Body中有Cookie Data ,并且值与登录接口返回的信息头中的set-Cookie-致。