二、基础知识
术语介绍
模块(空行向上匹配) | 字段/词 | 含义 |
线程组 | 线程数 | 虚拟用户数 |
ㅤ | Ramp-Up时间 | 所有虚拟用户全部启动的时间 |
ㅤ | 循环次数 | 每个线程发送请求的个数 |
HTTP请求 | 参数数据 | 这里的参数表示的是请求负载 |
配置元件-HTTP信息头管理器 | 信息头 | 添加请求token |
断言 | 响应断言 | 判断请求的结果是否正常 |
ㅤ | 断言结果 | 根据响应断言统计请求结果 |
定时器-CTT | 常数吞吐量计数器 | QPS测试 |
监视器-聚合报告 | Throughout字段 | TPS数据 |
阶梯式压测 | This group will start | 总线程/用户数 |
ㅤ | First wait for | 启动前等待时间 |
ㅤ | then start | 从。号线程/用户开始 |
ㅤ | Next add | 每次阶梯添加的线程/用户数 |
ㅤ | threads every | 每个阶梯运行的时间 |
ㅤ | using ramp-up | 阶梯切换时间 |
ㅤ | Then hold load for | 最大并发时的持续时间 |
ㅤ | Finally stop | 压测完成用户退出数,同样是阶梯退出 |
ㅤ | threads every | 每次退出间隔时间 |
ㅤ | ㅤ | ㅤ |
线程组
执行流程图
JMeter测试执行流程: 开始 ↓ 执行 setUp线程组 (如果有) ↓ 执行 普通线程组 (按顺序或并行) ↓ 执行 tearDown线程组 (如果有) ↓ 结束
特性 | setUp线程组 | 普通线程组 | tearDown线程组 |
执行时机 | 最先执行 | setUp之后执行 | 所有普通线程组之后执行 |
典型用途 | 测试前准备 | 主测试业务 | 测试后清理 |
执行次数 | 通常只执行一次 | 按配置循环执行 | 通常只执行一次 |
依赖关系 | 不依赖其他组 | 依赖setUp的初始化 | 依赖主测试完成 |
是否必须 | 可选 | 必须(至少一个) | 可选 |
并发用户 | 通常单用户 | 模拟真实并发 | 通常单用户 |
持续时间 | 较短 | 主要测试时长 | 较短 |
注意:至少要有一个普通线程组,如果单独一个setUp或者tearDown线程组会报错
数据计算
设定数据:
- 日活100W
- 高峰期4h
- 高峰期占总访问量60%
- 平均每天每人5次访问
计算结果或逻辑:
- 高峰期访问人数
1000000*0.6/(4*3600)≈42人/s
- 高峰期QPS
3000000/(4*3600)≈208请求/s
- 并发用户数计算
1000000/4/3600*5≈345人/s;公式为:(用户总量/统计时间)*影响因子
三、测试场景
3.1 常规简单检查
测试计划结构: ├── 线程组 │ ├── HTTP请求 (登录接口) │ │ ├── 响应断言 (验证"登录成功") │ │ └── 响应断言 (验证状态码=200) │ └── HTTP请求 (查询接口) │ ├── 响应断言 (验证JSON格式) │ └── 响应断言 (验证数据完整性) └── 监听器 ├── 断言结果 # 查看详细断言结果 └── 查看结果树 # 查看请求响应详情
3.2 阶梯式压测
前提条件
- 下载JMeter-manager并放入lib/ext目录下:Install :: JMeter-Plugins.org
- 在Available Plugins选项中输入jpgc后空格,就可以搜索出jpgc插件,然后勾选jpgc - Standard Set后,点击Apply Changes and Restart JMeter
- 在Available Plugins中找到Custom Thread Groups,点击Apply Changes and Restart JMeter
实现流程
- 创建负载控制器线程组(sepping thread group)
- 添加配置元件:HTTP请求以及请求头数据
- 添加断言
- 添加监听器
3.3 参数化测试
准备工作
- 文件格式要求:第一行为变量名称
- 使用UTF-8格式,并使用英文逗号分隔
实现流程
- 添加线程(一般是setUp线程,优先级更高),注意配置循环次数!
- 添加配置元件-CSV Data Set Config
- 添加请求并引用变量,使用
${变量名}格式调用数据
- 给请求添加断言
- 添加监听器(察看结果树可检查请求调用)
3.4
四、测试实例
4.1 登录接口-参数化测试
前置数据
POST /webservices/qqOnlineWebService.asmx HTTP/1.1 Host: www.webxml.com.cn Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://WebXml.com.cn/qqCheckOnline" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <qqCheckOnline xmlns="http://WebXml.com.cn/"> <qqCode>string</qqCode> </qqCheckOnline> </soap:Body> </soap:Envelope>
1、添加线程组,其中循环次数为数据总量
2、添加csv数据读取
3、添加HTTP请求
4、添加HTTP请求头管理器
5、添加监视器
6、执行结果检查
树状图:
4.2QPS负载+多线程
题目/前置数据:42个用户访问网站,负载达到208QPS时的平均响应时间
1、添加线程组
2、添加HTTP请求
3、给HTTP请求添加定时器-CTT。注意:时间单位是分钟
4、添加监视器