接口测试 如何使用 Jmeter 不同线程组使用同个登录信息,比如 sessionId?

北向。 · 2019年11月29日 · 最后由 北向。 回复于 2019年11月30日 · 2872 次阅读

将正则表达式提取的参数传给全局(跨线程组使用变量)
一、使用正则表达式提取 sessionId
1、在测试计划(跨线程组使用变量)--> 线程组(登录)--> 添加 HTTP 请求(登录接口)
(1)创建测试计划:
勾选独立运行每个线程组(例如在一个组运行结束后启动下一个)

(2)添加线程组,命名登录

(3)添加 HTTP 请求(登录接口)

2、在登录接口添加 -- 后置处理器(正则表达式提取器)
因为我们是要提取的是这个请求接口返回的响应值,因此添加的是后置处理器正则表达式提取器;

(1)设置正则表达式提取器:

() 填写正则表达式的时候,一个小括号代表一个分组;多个 () 则代表多个分组;
(2)需要查看提取器提取出来的值,因此需要添加一个 debug Sampler(调试取样器);

通过察看结果树可以看到 sid 提取成功

红框内的是提取出来的值,结尾 g 代表着分组,1 代表着第一个分组;

3、在登录接口添加 -- 后置处理器(BeanShell 后置处理程序)
(1)设置 BeanShell 后置处理程序

(2)这里填入的函数,可以通过函数助手获取:

选择__setProperty 函数:
输入引用名称以及获取的参数
然后点击生成按钮

将生成的函数 拷贝 到 BeanShell 后置处理程序的 Script 上

二、如何把提取的 sid 放入全局变量里面呢?
1、在测试计划下面添加一个 HTTP Cookie 管理器,并添加参数
名称:sessionId
值 :${__P(newtoken)} # 这里的 newtoken 是从 BeanShell 后置处理程序编辑函数时定义的

到这里全局变量已经设置完成了。

三、创建另一个线程组(HomePageOne),并添加需要的接口

添加察看结果树,运行接口

这是引用全局变量成功了

无效案例:
如果没有引用成功的话,如下图:

这里需要注意的是:在测试计划中,必须要勾选独立运行每个线程组(例如在一个组运行结束后启动下一个)

共收到 7 条回复 时间 点赞
北向。 关闭了讨论 11月12日 10:14
北向。 重新开启了讨论 12月03日 19:49
北向。 关闭了讨论 11月30日 01:08
aabbcc 回复

谢谢你

北向。 重新开启了讨论 11月30日 01:07
北向。 关闭了讨论 11月30日 01:03
北向。 回复

?代表什么. 我说的就是你为什么再不同线程里登录不成功的表象.
用什么方法能获取到跨线程组的登录信息其实很多,
比如楼上说的跨线程组传参、
比如 jmeter 的插件里就有这种专门处理跨线程组的。
如果你要手把手的解决方法,对不起.
我主张先自己尝试以下,解决不了了再来问
我给你的是一个思路

跨线程组传参传对了吗

aabbcc 回复

可以看到

你是怎么设置全局变量的,在调试取样器那能看到你设置的全局变量吗?

jacksboy 回复

同一个线程组里成功了,说明多个请求都是共用的一个登录接口的请求信息
不同线程不成功,那就说明你没获取到上一个登录接口的请求信息或者是没获取对

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册