jmeter如何设置登录接口只调用一次以及遇到的问题:cookie参数放在消息头headers里面?
需求前提:
我想压测获取产品列表这个接口,但是这个接口依附于sessionid,所以我必须先登录成功,拿到登录接口,但是我只想实现压测获取产品列表这个接口,所以登录没必要登录多次,只需要登录一次就行。
所以Jmeter如何设置登录接口只调用一次开始实施。
解决方法:
方法一.用同一个线程组,用仅一次控制器
是用同一线程组实现的,线程数那里只能设置次数=1,循环次数设置为n次,满足登录只请求1次,获取产品列表接口可以请求n次。
缺点就是线程数那里只能设置1次。
方法二. 跨线程去做,把登录接口单独放在setUp线程组里面,然后向下一个线程组Thread group传参
没缺点!推荐使用方法二,虽然刚开始实施花费了将近2小时
第一步用写死的session去调试,调试成功,再去做跨线程
方法一. 用仅一次控制器
实现思路:
1.登录接口放在仅一次控制器里面
添加边界提取器或者正则提取器,还有调试后置处理程序即debug PostProcessor,把Cookie的value:SESSIONID=XXXXXX
然后这个Cookie放在headers里面
把XXXX从登录接口的响应结果里面提取出来,赋给某个变量A
2.获取产品列表的接口
headers里面添加
Cookie ${变量A}
a.cookie放在cookie管理器里面,不放在headers
b.cookie放在header管理里面,放在headers
方法二. 可以把登录接口单独放在一个线程组里面,然后向下传参
实现思路:
1.新增setup线程组,添加登录接口
登录接口下面:
-》添加边界提取器
-》添加信息头管理器
-》添加Beanshell 后置处理程序即BeanShell PostProcessor,使用setProperty的函数,然后在下个线程里的header里增加这个sessionid:
${__setProperty(new_sessionid,${sessionid},false)}
-》添加调试后置处理即debug PostProcessor,用来看登录接口是否取值成功
2. 新增线程组,放获取产品列表的接口
产品列表接口下面:
-》添加信息头
Cookie SESSIONID=${__P(new_sessionid)}
另外
-》添加Beanshell 后置处理程序即BeanShell PostProcessor,使用setProperty的函数,然后在下个线程里的header里增加这个sessionid:
${__setProperty(new_sessionid,${sessionid},false)}
BeanShell PostProcessor也可以用beanshell 断言来做,即添加benshell断言将正则截取token和用户userid保存下,,效果是一样的!
${__setProperty(new_token,${token},false)}
${__setProperty(new_uid,${uid},false)}
${__P(new_token)}
${__P(new_sessionid)}
cookie参数放在消息头里面