头像
淇迹时刻
-- : -- : --
切换主题色
-- : -- : --

第三阶段:JMeter实战

最后更新于:

第三阶段:JMeter实战

一、JMeter简介

1.1 什么是JMeter?

JMeter是Apache基金会的开源性能测试工具,最初用于Web应用测试,现在已扩展到数据库、消息队列、FTP等多种协议的性能测试。

1.2 JMeter特点

  • 功能强大:支持多种协议和场景
  • 可视化界面:图形化界面,易于操作
  • 插件丰富:拥有丰富的插件生态
  • 报告美观:支持多种报告格式

1.3 安装JMeter

1# 下载JMeter
2# https://jmeter.apache.org/download_jmeter.cgi
3
4# 解压后运行
5bin/jmeter.sh    # Linux/Mac
6bin/jmeter.bat   # Windows

二、测试计划设计

2.1 测试计划结构

 1测试计划
 2├── 线程组
 3│   ├── HTTP请求默认值
 4│   ├── Cookie管理器
 5│   ├── HTTP信息头管理器
 6│   ├── 采样器
 7│   │   ├── HTTP请求
 8│   │   ├── JDBC请求
 9│   │   └── ...
10│   ├── 控制器
11│   │   ├── 简单控制器
12│   │   ├── 循环控制器
13│   │   └── ...
14│   ├── 断言
15│   │   ├── 响应断言
16│   │   ├── JSON断言
17│   │   └── ...
18│   └── 监听器
19│       ├── 聚合报告
20│       ├── 查看结果树
21│       └── ...
22└── 配置元件

2.2 线程组配置

参数说明
线程数并发用户数
Ramp-Up时间启动所有线程的时间(秒)
循环次数每个线程执行的次数
调度器配置测试开始和结束时间

2.3 HTTP请求默认值

1协议: http
2服务器名称或IP: localhost
3端口号: 8080
4路径: /api

三、常用组件

3.1 采样器(Samplers)

HTTP请求

1名称: 获取用户列表
2协议: GET
3路径: /api/users
4参数:
5    page = 1
6    size = 10

JDBC请求

 1JDBC连接配置:
 2    变量名: db
 3    JDBC驱动类: com.mysql.cj.jdbc.Driver
 4    JDBC URL: jdbc:mysql://localhost:3306/test
 5    用户名: root
 6    密码: password
 7
 8JDBC请求:
 9    变量名: db
10    查询类型: Select Statement
11    查询语句: SELECT * FROM users LIMIT 10

3.2 控制器(Controllers)

循环控制器

1名称: 循环10次
2循环次数: 10

条件控制器

1名称: 根据响应判断
2条件: ${__jexl3(${response_code} == 200,)}

随机控制器

1名称: 随机选择
2随机种子: 123

3.3 断言(Assertions)

响应断言

1名称: 检查响应状态码
2响应字段: 响应代码
3模式匹配规则: 包含
4要测试的模式: 200

JSON断言

1名称: 检查JSON响应
2JSON路径: $.code
3预期值: 0

3.4 前置处理器(Pre-Processors)

用户定义的变量

1名称: base_url
2值: http://localhost:8080

CSV数据文件设置

1文件名: test_data.csv
2文件编码: UTF-8
3变量名称: username,password
4分隔符: ,

3.5 后置处理器(Post-Processors)

JSON提取器

1名称: 提取用户ID
2引用名称: user_id
3JSON路径表达式: $.data.id
4匹配数字: 1

正则表达式提取器

1名称: 提取Token
2引用名称: token
3正则表达式: "token":"(.*?)"
4模板: $1$
5匹配数字: 1

四、高级场景

4.1 数据库性能测试

1测试计划
2├── JDBC连接配置
3└── 线程组
4    ├── JDBC请求 - 查询用户列表
5    ├── JDBC请求 - 查询订单详情
6    ├── JDBC请求 - 更新用户信息
7    └── 聚合报告

4.2 消息队列性能测试

1测试计划
2├── JMS连接配置
3└── 线程组
4    ├── JMS发布者 - 发送消息
5    ├── JMS订阅者 - 接收消息
6    └── 聚合报告

4.3 自定义协议测试

1测试计划
2└── 线程组
3    ├── Java请求 - 自定义协议
4    └── 聚合报告

五、测试报告

5.1 聚合报告

指标说明
Label请求名称
#Samples请求总数
Average平均响应时间(ms)
Median中位数响应时间(ms)
90% Line90%请求的响应时间(ms)
95% Line95%请求的响应时间(ms)
99% Line99%请求的响应时间(ms)
Min最小响应时间(ms)
Max最大响应时间(ms)
Error%错误率
Throughput吞吐量(请求/秒)

5.2 生成HTML报告

1# 执行测试并生成HTML报告
2jmeter -n -t test_plan.jmx -l results.jtl -e -o report
3
4# 参数说明
5# -n: 非GUI模式
6# -t: 指定测试计划文件
7# -l: 指定结果文件
8# -e: 生成HTML报告
9# -o: 指定报告输出目录

5.3 报告分析

1关键指标分析:
21. 响应时间是否在可接受范围内
32. 吞吐量是否达到预期
43. 错误率是否在允许范围内
54. 是否存在性能瓶颈
65. 系统资源使用情况

六、实战练习

6.1 练习1:创建HTTP测试计划

创建一个JMeter测试计划,测试以下接口:

  • GET /api/users
  • POST /api/users
  • GET /api/users/{id}
  • PUT /api/users/{id}
  • DELETE /api/users/{id}

6.2 练习2:数据库测试

创建一个JMeter测试计划,测试MySQL数据库性能:

  • 查询用户列表
  • 查询订单详情
  • 插入新用户
  • 更新用户信息

6.3 练习3:参数化测试

使用CSV数据文件设置实现参数化测试:

  • 准备测试数据文件
  • 配置CSV数据文件设置
  • 在HTTP请求中使用变量

下一章04-性能监控与分析.md

最新文章