在做压力测试的时候常常会遇见一个场景,想要测试的接口需要登录接口返回的token做参数,或者需要其它接口的认证信息,通常能想到的就是正则表达式提取器,把需要的参数提取出来,传递到另一个HTTP请求中。

如果有多个线程组的情况下,需要每个线程组中都要有登陆请求,这不符合我们的规范,最理想状态就是获取token的接口只请求一次。然后登陆的认证信息,在JMeter测试脚本中的所有接口请求中都可以使用。

这样就实现了跨线程组传递参数,这使得接口之间的关联更加灵活。

所以:什么是跨线程组关联呢?就是在不同线程组之间实现参数传递。

1、JMeter中实现跨线程组关联说明

(1)JMeter中实现跨线程组关联步骤

  1. 先进行登陆请求。
  2. 记录登陆请求返回的Cookie,或者有关登录状态的token信息。

    如果是Cookie,就用HTTP Cookie管理器获取。

    如果是token,就用提取器进行提取。
  3. 然后通过函数助手中的__setProperty函数,把Cookie值升级为JMeter的全局属性,就可以在线程组和线程组之间共享了。
  4. 然后从另一个线程组中通过__property函数,获取全局数据。
  5. 然后把获取的Cookie或token,加入到查看购物车请求中,保持用户登陆状态。

    如果是Cookie,就用添加到HTTP信息头管理器组件中。

    如果是token,就添加到请求的参数中。
  6. 执行脚本,查看运行结果。

(2)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组中,添加配置元件HTTP Cookie管理器组件:选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP Cookie管理器
  4. 在线程组中,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
  5. 在线程组中,添加取样器“BeanShell 取样器”组件:选中“线程组”右键 —> 添加 —> 取样器 —> BeanShell 取样器BeanShell 取样器
  6. 在线程组中,添加配置元件“HTTP信息头管理器”组件:选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP信息头管理器
  7. 在线程组中,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

提示:需要重复添加的组件这里不重复描述。

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

2、用户登陆请求的相关操作

(1)进行登陆操作获取Cookie信息

请求登陆操作界面如下:

通过添加HTTP Cookie管理器组件,会把服务器返回来的Cookie信息,默认存储到线程变量中。

前提:jmeter.properties文件中,设置CookieManager.save.cookies=true

然后我们可以通过Debug Sampler(调试取样器)组件,查看到线程变量中的Cookie数据。

如下图所示:

说明:保持用户登陆状态的Cookie数据为:COOKIE_ECS_ID=daf59ab57d42c0cee3596feb7ad17ff576403601

这样我们就找到Cookie的值了。

(2)把Cookie数据提升为JMeter的全局属性

我们需要通过__setProperty函数,把Cookie数据提升为JMeter的全局属性。这样该Cookie就可以在JMeter脚本中,所有线程组里都可以使用了。(也就是可以在线程组和线程组之间通信)

接下来点击:工具 —> 函数助手对话框,打开函数助手。(之前的版本在选项中)

然后选择__setProperty函数。

第一行填写:填写升级为全局属性后的变量名。(自定义即可)

第二行填写:定义全局属性的值。(我们就把Cookie属性的值,引用到这里)

Return Original Value of property (default false)?:返回属性的原始值(默认为 false),默认即可。

编写完成如下图所示:

这样我们就把Cookie提升为JMeter的全局属性了,变量名叫kuayu_session

JMeter的全局属性就相当于在“测试计划”界面中定义的用户定义的变里

(3)编写BeanShell取样器组件

上面生成的这个函数比较特殊,他必须放到BeanShell Sampler组件里面。当把这个函数放到BeanShell取样器组件里面后,就相当于把变量kuayu_session的值,放到了我们声明的公共空间里面。

如下图所示:

3、查看用户购物车请求的相关操作

(1)查看用户购物车请求内容

标准的Get请求,填写请求的基本信息即可。

如下图所示:

(2)获取JMeter全局属性

因为我们把用户登陆线程组中的Cookie属性提升为JMeter全局属性了。

需要在查看购物车线程组中把全局属性中的Cookie属性获取到,使用__Property函数。

打开函数助手:工具 —> 函数助手对话框。(之前的版本在选项中)

选择__Property函数。

第一行:填写要获取的JMeter全局属性的变量名。(即:kuayu_session

第二行:重用函数计算值的引用名。(可选填)

默认值:属性未定义时的默认值。

编辑完,如下图所示:

提示:在The result of the function is中看到对应的内容,表示函数生成成功。

(3)HTTP信息头管理器内容

我们需要把上一步获取到的Cookie信息,放入查询购物车的请求中。

因为是Cookie的相关数据,只能放在请求头的信息中。(如果要是token,就放在请求的参数中)

编辑界面如下:

这样查看购物车请求,就带有用户的登陆状态了。

(4)设置线程组的启动时间

因为我们需要等待前面的登陆线程组执行完成后,在进行查看购物的请求,否则将获取不到我们需要的Cookie信息。

这时候就需要设置线程组元件界面中的调度器属性了。

我们把持续时间启动延迟都设置成3,表示JMeter脚本启动3秒后,再执行查看购物线程组中的内容,并持续3秒钟。

如下图所示:

调度器配置(Scheduler Configuration)说明:

  • 持续时间(秒):如果选择了调度程序复选框,控制测试执行的持续时间,以秒为单位。
  • 启动延迟(秒):如果选择了调度程序复选框,控制测试在多久后启动执行,以秒为单位。

4、运行结果说明

我们先来看一下,没有进行跨线程相关设置请求的结果。

如下图所示:可以看到购物车中没有任何的数据。

我们再来看一下,进行跨线程设置请求的结果。

如下图所示:可以看到该用户购物车中的信息了。

再来看看查看购物车请求的内容,可以看到请求带有Cookie信息。

如下图所示:

以上就完成了,在JMeter中实现跨线程组关联操作的演示。

5、拓展说明(也很重点)

如上需求,在进行性能测试的时候,我们要保证登陆请求线程组中,所有用户登陆的Cookie或token都保存好,才能进入到下一个线程组中执行其他的跨域关联请求。

这样就会有两种实现方式:

  1. 像本篇文章一样,把需要关联的数据提升到全局属性。

    但是这种方式只能适用于单线程跨域关联,如果是很多用户并发进行跨域关联,该种方式只是把最后一个登陆请求的Cookie或token进行了提升。所以下一个线程组中使用的登陆状态,都是登陆线程组最后一个人的请求状态。
  2. 第二种方式,把登陆请求中的Cookie或token信息,提取出来并保存到一个文件中。然后在其他关联跨域请求中,使用参数化的方式,把用户登陆的Cookie或token信息,传入到所需的请求中,从而实现跨域关联的操作。(推荐)

第二种方式实现步骤:

  1. 每一个接口放在一个线程组中。
  2. 把登陆接口的返回Cookie数据,写入到.csv文件中。
  3. jmeter写.csv文件,使用BeanShell。取样器添加后置处理器BeanShell postprocessor
  4. 在下一个跨域关联接口使用数据,用参数化的方式导入.csv文件。

只提供BeanShell中的数据存储代码(简单示例)

import java.io.FileWriter;
import java.io.BufferedWriter; FileWriter fstream = new FileWriter("C:\\Users\\L\\Desktop\\JMeterScript\\user_session.csv", true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("COOKIE_ECS_ID")+"\n");
out.close();
fstream.close();

关于详细步骤,这里就不展开说明了。我们举一反三,实现这个操作,会很有意思的。

『动善时』JMeter基础 — 38、JMeter中实现跨线程组关联的更多相关文章

  1. 『动善时』JMeter基础 — 8、JMeter主要元件介绍

    目录 1.测试计划(Test Plan) 2.线程组 3.取样器(sampler) 4.逻辑控制器(Logic Controller) 5.配置元件(Config Element) 6.定时器(Tim ...

  2. 『动善时』JMeter基础 — 18、JMeter配置元件【计数器】

    目录 1.计数器介绍 2.计数器界面详解 3.计数器的使用 (1)测试计划内包含的元件 (2)线程组界面内容 (3)计数器界面内容 (4)HTTP请求界面内容 (5)查看结果 1.计数器介绍 如果需要 ...

  3. 『动善时』JMeter基础 — 22、JMeter中实现参数化(CSV)

    目录 1.参数化的定义 2.什么情况下需要用到参数化 3.JMeter实现参数化的方式 4.CSV数据文件设置界面详细说明 (1)CSV数据文件设置组件界面说明 (2)补充说明:Recycle on ...

  4. 『动善时』JMeter基础 — 47、JMeter的HTTP代理服务器详细介绍

    目录 1.HTTP代理服务器的添加 2.HTTP代理服务器界面详解 (1)State:状态 (2)Global Settings:全局设置 (3)Test Plan Creation:测试计划创建 ( ...

  5. 『动善时』JMeter基础 — 60、固定吞吐量测试

    目录 1.定时器介绍 2.固定吞吐量定时器介绍 3.固定吞吐量定时器界面说明 4.固定吞吐量定时器的使用 (1)测试计划内包含的元件 (2)登陆请求内容 (3)固定吞吐量定时器内容 (4)线程组元件内 ...

  6. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  7. 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍

    目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...

  8. 『动善时』JMeter基础 — 37、将JMeter测试结果写入Excel

    目录 1.环境准备 (1)引入操作Excel文件的基础JAR包 (2)引入封装自定义操作Excel文件的JAR包 2.准备测试需要的数据 3.测试结果写入Excel演示 (1)测试计划内包含的元件 ( ...

  9. 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解

    目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...

随机推荐

  1. vagrant构建centos虚拟环境

    vagrant搭建centos 什么是vagrant 如何使用 1.构建本地的目录 2.官方下载对应的镜像文件,官方下载地址 3.导入刚刚下载的镜像(box文件) 4.初始化 5.修改Vagrantf ...

  2. hdu 3062 基础的2sat

    题意: Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. Python脚本模拟登陆DVWA

    目录 requests模拟登陆 Selenium自动化测试登陆 环境:python3.7 windows requests模拟登陆 我们登陆DVWA的时候,看似只有一步:访问网站,输入用户名和密码,登 ...

  4. Win64 驱动内核编程-3.内核里使用内存

    内核里使用内存 内存使用,无非就是申请.复制.设置.释放.在 C 语言里,它们对应的函数是:malloc.memcpy.memset.free:在内核编程里,他们分别对应 ExAllocatePool ...

  5. 本地计算机上的Apple Mobile Device服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止

    解决办法:1.开始--运行--regedit.exe,打开注册表编辑器,删除以下两个键: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Wi ...

  6. WSL2+Ubuntu配置Java Maven Hadoop Spark环境

    所需文件: 更新日期为2021/5/8: Linux 内核更新包 JDK1.8 maven3.8.1 hadoop3.3.0 spark3.1.1 WSL?WSL2? WSL是适用于 Linux 的 ...

  7. window系统搭建医药后台系统

    软件准备: mysql版本: 5.7 jdk版本:1.8 tomcat版本: 9.0 mysql:5.7 第一步:新建Mysql连接   新建Mysql连接 第二步:新建数据库   新建数据库 第三步 ...

  8. Asp.NetCore Web应用程序中的请求管道和中间件

    你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程. 上一节,我们讲到,Start ...

  9. win10 下安卓源码同步小技巧

    win10下,通过 清华镜像源 AOSP 可以快速拿到 100G 的 .repo  备份 然后 用 repo sync 就可以得到 安卓源码,爽不爽! 下载到win10 e盘下,用powershell ...

  10. 【BUAA软工】结对编程作业

    项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程结对编程项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 完 ...