|
| 1 | +# JMeter 应用指南 |
| 2 | + |
| 3 | +> [Jmeter](https://github.com/apache/jmeter) 是一款基于 Java 开发的功能和性能测试软件。 |
| 4 | +> |
| 5 | +> 🎁 本文编辑时的最新版本为:5.1.1 |
| 6 | +
|
| 7 | +## 1. 简介 |
| 8 | + |
| 9 | +[Jmeter](https://github.com/apache/jmeter) 是一款使用 Java 开发的功能和性能测试软件。 |
| 10 | + |
| 11 | +### 1.1. 特性 |
| 12 | + |
| 13 | +Jmeter 能够加载和性能测试许多不同的应用程序/服务器/协议类型: |
| 14 | + |
| 15 | +- 网络 - HTTP,HTTPS(Java,NodeJS,PHP,ASP.NET 等) |
| 16 | +- SOAP / REST Web 服务 |
| 17 | +- FTP 文件 |
| 18 | +- 通过 JDBC 的数据库 |
| 19 | +- LDAP |
| 20 | +- 通过 JMS 的面向消息的中间件(MOM) |
| 21 | +- 邮件-SMTP(S),POP3(S)和 IMAP(S) |
| 22 | +- 本机命令或 Shell 脚本 |
| 23 | +- TCP 协议 |
| 24 | +- Java 对象 |
| 25 | + |
| 26 | +### 1.2. 工作流 |
| 27 | + |
| 28 | +Jmeter 的工作原理是仿真用户向服务器发送请求,并收集服务器应答信息并计算统计信息。 |
| 29 | + |
| 30 | +Jmeter 的工作流如下图所示: |
| 31 | + |
| 32 | + |
| 33 | + |
| 34 | +### 1.3. 主要元素 |
| 35 | + |
| 36 | +Jmeter 的主要元素如下: |
| 37 | + |
| 38 | +- **`测试计划(Test Plan)`** - 可以将测试计划视为 JMeter 的测试脚本 。测试计划由测试元素组成,例如线程组,逻辑控制器,样本生成控制器,监听器,定时器,断言和配置元素。 |
| 39 | +- **`线程组(Thread Group)`** - 线程组的作用是:模拟大量用户负载的运行场景。 |
| 40 | + - 设置线程数 |
| 41 | + - 设置加速期 |
| 42 | + - 设置执行测试的次数 |
| 43 | +- **`控制器(Controllers)`** - 可以分为两大类: |
| 44 | + - **`采样器(Sampler)`** - 采样器的作用是模拟用户对目标服务器发送请求。 采样器是必须将组件添加到测试计划中的,因为它只能让 JMeter 知道需要将哪种类型的请求发送到服务器。 请求可以是 HTTP,HTTP(s),FTP,TCP,SMTP,SOAP 等。 |
| 45 | + - **`逻辑控制器`** - 逻辑控制器的作用是:控制多个请求发送的循环次数及顺序等。 |
| 46 | +- **`监听器(Listeners)`** - 监听器的作用是:收集测试结果信息。如查看结果树、汇总报告等。 |
| 47 | +- **`计时器(Timers)`** - 计时器的作用是:控制多个请求发送的时间频次。 |
| 48 | +- **`配置元素(Configuration Elements)`** - 配置元素的工作与采样器的工作类似。但是,它不发送请求,而是提供预备的数据等,如 CSV、函数助手。 |
| 49 | +- **`预处理器元素(Pre-Processor Elements)`** - 预处理器元素在采样器发出请求之前执行,如果预处理器附加到采样器元素,那么它将在该采样器元素运行之前执行。预处理器元素用于在运行之前准备环境及参数。 |
| 50 | +- **`后处理器元素(Post-Processor Elements)`** - 后处理器元素是在发送采样器请求之后执行的元素,常用于处理响应数据。 |
| 51 | + |
| 52 | + |
| 53 | + |
| 54 | +> 📌 提示: |
| 55 | +> |
| 56 | +> Jmeter 元素的数量关系大致如下: |
| 57 | +> |
| 58 | +> 1. 脚本中最多只能有一个测试计划。 |
| 59 | +> 2. 测试计划中至少要有一个线程组。 |
| 60 | +> 3. 线程组中至少要有一个取样器。 |
| 61 | +> 4. 线程组中至少要有一个监听器。 |
| 62 | +
|
| 63 | +## 2. 安装 |
| 64 | + |
| 65 | +### 2.1. 环境要求 |
| 66 | + |
| 67 | +- 必要的。Jmeter 基于 JDK8 开发,所以必须运行在 JDK8 环境。 |
| 68 | + |
| 69 | + - JDK8 |
| 70 | + |
| 71 | +- 可选的。有些 jar 包不是 Jmeter 提供的,如果需要相应的功能,需要自行下载并置于 `lib` 目录。 |
| 72 | + - JDBC |
| 73 | + - JMS |
| 74 | + - [Bouncy Castle](http://www.bouncycastle.org/test_releases.html) |
| 75 | + |
| 76 | +### 2.2. 下载 |
| 77 | + |
| 78 | +进入 [**Jmeter 官网下载地址**](https://jmeter.apache.org/download_jmeter.cgi) 选择需要版本进行下载。 |
| 79 | + |
| 80 | +### 2.3. 启动 |
| 81 | + |
| 82 | +解压 Jmeter 压缩包,进入 bin 目录 |
| 83 | + |
| 84 | +Unix 类系统运行 `jmeter` ;Windows 系统运行 `jmeter.bat` |
| 85 | + |
| 86 | + |
| 87 | + |
| 88 | +## 3. 使用 |
| 89 | + |
| 90 | +### 3.1. 创建测试计划 |
| 91 | + |
| 92 | +> 🔔 注意: |
| 93 | +> |
| 94 | +> - 在运行整个测试计划之前,应保存测试计划。 |
| 95 | +> |
| 96 | +> - JMeter 的测试计划以 `.jmx` 扩展文件的形式保存。 |
| 97 | +
|
| 98 | +#### 3.1.1. 创建线程组 |
| 99 | + |
| 100 | +- 在“测试计划”上右键 【添加】=>【线程(用户)】=>【线程组】。 |
| 101 | + |
| 102 | +- 设置线程数和循环次数 |
| 103 | + |
| 104 | + |
| 105 | + |
| 106 | +#### 3.1.2. 配置原件 |
| 107 | + |
| 108 | +- 在新建的线程组上右键 【添加】=>【配置元件】=>【HTTP 请求默认值】。 |
| 109 | + |
| 110 | +- 填写协议、服务器名称或 IP、端口号 |
| 111 | + |
| 112 | + |
| 113 | + |
| 114 | +#### 3.1.3. 构造 HTTP 请求 |
| 115 | + |
| 116 | +- 在“线程组”上右键 【添加-】=>【取样器】=>【HTTP 请求】。 |
| 117 | + |
| 118 | +- 填写协议、服务器名称或 IP、端口号(如果配置了 HTTP 请求默认值可以忽略) |
| 119 | +- 填写方法、路径 |
| 120 | +- 填写参数、消息体数据、文件上传 |
| 121 | + |
| 122 | + |
| 123 | + |
| 124 | +#### 3.1.4. 添加 HTTP 请求头 |
| 125 | + |
| 126 | +- 在“线程组”上右键 【添加】=>【配置元件】=>【HTTP 信息头管理器】 |
| 127 | +- 由于我的测试例中传输的数据为 json 形式,所以设置键值对 `Content-Type`:`application/json` |
| 128 | + |
| 129 | + |
| 130 | + |
| 131 | +#### 3.1.5. 添加断言 |
| 132 | + |
| 133 | +- 在“线程组”上右键 【添加】=>【断言】=>【 响应断言 】 |
| 134 | +- 在我的案例中,以 HTTP 应答状态码为 200 来判断请求是否成功 |
| 135 | + |
| 136 | + |
| 137 | + |
| 138 | +#### 3.1.6. 添加察看结果树 |
| 139 | + |
| 140 | +- 在“线程组”上右键 【添加】=>【监听器】=>【察看结果树】 |
| 141 | +- 直接点击运行,就可以查看测试结果 |
| 142 | + |
| 143 | + |
| 144 | + |
| 145 | +#### 3.1.7. 添加汇总报告 |
| 146 | + |
| 147 | +- 在“线程组”上右键 【添加】=>【监听器】=>【汇总报告】 |
| 148 | +- 直接点击运行,就可以查看测试结果 |
| 149 | + |
| 150 | + |
| 151 | + |
| 152 | +#### 3.1.8. 保存测试计划 |
| 153 | + |
| 154 | +执行测试计划前,GUI 会提示先保存配置为 `jmx` 文件。 |
| 155 | + |
| 156 | +### 3.2. 执行测试计划 |
| 157 | + |
| 158 | +官方建议不要直接使用 GUI 来执行测试计划,这种模式指适用于创建测试计划和 debug。 |
| 159 | + |
| 160 | +执行测试计划应该使用命令行模式,语法形式如下: |
| 161 | + |
| 162 | +```bash |
| 163 | +jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder] |
| 164 | +``` |
| 165 | + |
| 166 | +执行测试计划后,在 `-e -o` 参数后指定的 web 报告目录下,可以找到测试报告内容。在浏览器中打开 `index.html` 文件,可以看到如下报告: |
| 167 | + |
| 168 | + |
| 169 | + |
| 170 | +## 4. 问题 |
| 171 | + |
| 172 | +### 4.1. 如何读取本地 txt/csv 文件作为请求参数 |
| 173 | + |
| 174 | +参考:[Jmeter 读取本地 txt/csv 文件作为请求参数,实现接口自动化](https://www.jianshu.com/p/3b2d3b643415) |
| 175 | + |
| 176 | +(1)依次点击【添加】=>【配置元件】=>【CSV 数据文件设置】 |
| 177 | + |
| 178 | +配置如下所示: |
| 179 | + |
| 180 | + |
| 181 | + |
| 182 | +重要配置说明(其他配置根据实际情况填): |
| 183 | + |
| 184 | +- 文件名:输入需要导入的数据文件位置。 |
| 185 | +- 文件编码:设为 UTF-8,避免乱码。 |
| 186 | +- 变量名称:使用 `,` 分隔输入变量列表。如截图中设置了两个变量 `a` 和 `b` |
| 187 | + |
| 188 | +(2)在 HTTP 请求的消息体数据中配置参数 |
| 189 | + |
| 190 | +``` |
| 191 | +[{"a":"${a}","b":"${b}"}] |
| 192 | +``` |
| 193 | + |
| 194 | +### 4.2. 如何有序发送数据 |
| 195 | + |
| 196 | +依次点击【添加】=>【逻辑控制器】=>【事务控制器】 |
| 197 | + |
| 198 | +## 5. 参考资料 |
| 199 | + |
| 200 | +- [Jmeter 官网](https://jmeter.apache.org/) |
| 201 | +- [Jmeter Github](https://github.com/apache/jmeter) |
| 202 | +- [Jmeter 性能测试入门](https://www.cnblogs.com/TankXiao/p/4045439.html) |
| 203 | +- [易百教程 - Jmeter 教程](https://www.yiibai.com/jmeter) |
| 204 | +- [Jmeter 读取本地 txt/csv 文件作为请求参数,实现接口自动化](https://www.jianshu.com/p/3b2d3b643415) |
0 commit comments