Jmeter跨线程组传递token失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jmeter跨线程组传递token失败相关的知识,希望对你有一定的参考价值。

参考技术A 在用Jmeter进行业务流程接口测试的时候,因为有多个线程组,但是所有的接口都依赖于登录接口。原先处理方式是每一个线程组里都添加一个登录接口,但是后面发现这样不是很友好,每次执行一个线程组都要调一次登录接口。所以想把登录接口提出来,单独放在一个线程组里。

实现流程大概这样:

一、建一个线程组,将登录接口添加进来

二、添加一个BeanShell Sample

里面写上提取cookie值的脚本,大致如下图

(因为测试的登录接口,响应头中返回的数据中有两个值所以分别提取两次)

三、完后,添加一个后置处理器,将提取到的值设置为全局变量

四、然后在其它线程组中添加cookie管理器,并添加引用上面设置的全部变量

问题开始出现:

所有配置完成后,开始执行,结果查看发现除登录外的其他线程组中的接口全部请求失败,原因“”用户未登录“”。

然后一通检查,添加日志,将过程都打印了出来,发现没什么问题。

然后又又又检查了一遍,发现在测试计划最外层添加了一个cookie管理器(如果最外层添加了cookie管理器,优先级要比线程组内的高,导致最终没有走线程组内设置的值)。将这个cookie管理器禁用后,成功调通。

接口测试工具-Jmeter使用笔记(九:跨线程组传递变量)

使用场景:

请求API需要授权令牌,但是授权令牌只需要获取一次,即可调用服务器上其他业务接口。

所以我想要把授权操作放在单独的一个线程,业务流放在其他线程。

这就需要我把从授权线程获取的令牌传入业务流线程。

 

解决方法———后置处理器Beanshell PreProcessor

1、首先选择“获取token”线程组:添加正则表达式,提取出token的值(不会使用正则表达式的同学请查阅博主之前Jmeter相关文章)

技术分享图片

2、在“获取token”线程组:添加后置处理器BeanShell PostProcessor

技术分享图片

Parameters:引用正则表达式提取的变量${token}

Script:具体beanshell语法大家可去查看相关资料,这里很简单,一条语句就搞定。

    意思是把获取的变量${token}设置为全局变量,并以新的名字newtoken来进行引用。

3、在“业务流”线程组引用全局变量newtoken

技术分享图片

引用方式是${__P(newtoken,)},注意花括号中是两个下划线,newtoken后还跟一个逗号,不要写漏了。

 

至于我在这个线程组里面加的固定定时器,是因为如果不加定时器,两个线程是同步执行的,会发生token值还没有获取到就进行业务流的接口请求,造成请求返回失败。

4、执行,查看结果

技术分享图片

获取到的token值为上图所示

技术分享图片

引用成功~

 

以上是关于Jmeter跨线程组传递token失败的主要内容,如果未能解决你的问题,请参考以下文章

jmeter跨线程组传递token实践

[存]Jmeter 如何实现跨线程组传递参数

Jmeter跨线程组调用token

接口测试工具-Jmeter使用笔记(九:跨线程组传递变量)

jmeter 正则获取多个返回token至本地文件,并跨线程组调用

JMeter — JMeter中实现跨线程组关联