jmeter中在测试计划下添加一个cookie管理器就能实现多个接口对于cookie的验证,但是只能作用于一个线程,如果把登录和其余接口用多个线程分开,非登录接口的request headers中显示no cookie,从而导致脚本报错!
解决方法:
- 创建一个登录的http请求,然后执行,看返回的cookie是在response的哪里!我这边数据返回在response headers里,有些会用token,会在response body里
- 在登录的http请求下创建
后置处理器--正则表达式提取器
或者后置处理器--边界值提取器
都可以,提取headers中的cookie信息
正则表达式提取器和边界值提取器的使用方法百度搜索一大把!
- 在登录http请求下创建一个
后置处理器--BeanShell PostProcessor
,把提起到的cookie值改成全局变量
格式:${__setProperty(转换成全局变量后的引用名,${正则表达式定义的变量名},)};
${__setProperty(APHPSESSID,${PHPSESSID},)};
${__setProperty(Alanguage,${language},)};
${__setProperty(A1_product,${1_product},)};
${__setProperty(ApageSize,${pageSize},)};
log.info("----------------------APHPSESSID="+${__P(APHPSESSID,)}+"--------------------");
- 再添加一个cookie管理器,这个cookie管理器和上面的是不同的,这个里面是要放装换成全局变量后的cookie引用名
注意:请看清楚层级结构,第二个cookie管理器所在的位子,请不要放在线程组内了!!!
关于第一个cookie的解释:我的登录中有重定向请求,第一个子请求就产生了cookie,后面两个子请求依赖于第一个子请求的cookie,所以我创建了两个cookie管理器!
登录线程下面又创建的一个cookie管理器,按照jmeter中的执行顺序,下面的线程只会用第二个cookie管理器中的数据
- 第二个cookie管理器中的写法
名称:cookie的key
值: 引用 ·{__setProperty(,,)};
中定义的全局变量名
格式:${__P(全局变量名,)}
域:我的理解,要测试的接口的域名或者ip
路径: 就用/
就好了
- 结果展现
下个线程也请求成功了