背景:
需要测试登录后的某个接口A的负载测试,目前的情况是:每测试一次这个接口A都需要登录一次,影响此接口A的测试结果。为了解决这个问题,可以参考如下的解决方案,有同线程组、跨线程组的区别,最终都达到session共享(cookie保持)。
一、同线程组的session共享
方式一:
在线程组中添加一个HTTP Cookie 管理器,即可自动获取登录。
方式二:
在同一个线程组中的不同控制器中实现session共享,将正则表达式获取的session值传递给HTTP Cookie 管理器.
二、跨线程组的session共享
思路: 设置一个jmeter全局变量并调用。 — 使用正则表达式获取sessionid — BeanShell PostProcessor设置全局变量 — http cookie管理器引用全局变量。
整个测试计划树状结构如下:
备注:记得一定要勾选独立运行每一个线程组
原理步骤解析:
1、在线程组1中,使用正则表达式获取JSESSIONID。
(JSESSIONID这个sessionid是登录接口的响应信息头中获取的,所以正则表达式获取字段勾选信息头)
2、通过BeanShell PostProcessor后置处理器设置全局变量。
${__setProperty(sessionid,${JSESSIONID},)}
3、在测试计划中,添加http cookie管理器引用全局变量,作用范围在整个测试计划。也可以在具体是线程组中添加http cookie管理器引用全局变量,只作用在此线程组内。
${__P(sessionid)}
注意:
1、可以添加一个debug sampler调试取样器,通过察看结果树记录正则表达式获取的值。