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参数放在消息头里面 

 

 

posted @ 2020-04-10 11:32  阳光美美哒  阅读(3911)  评论(0编辑  收藏  举报