目录
[1. JMeter 安装](#1. JMeter 安装)
[1.1 点击官网下载: JMeter官网下载](#1.1 点击官网下载: JMeter官网下载)
[1.2 下载后解压即可](#1.2 下载后解压即可)
[1.3 打开 JMeter](#1.3 打开 JMeter)
[1.3.1 方式一: 点击对应程序打开](#1.3.1 方式一: 点击对应程序打开)
[1.3.2 方式二: 命令行启动](#1.3.2 方式二: 命令行启动)
[1.4 关闭 JMeter](#1.4 关闭 JMeter)
[2. JMeter 基础配置](#2. JMeter 基础配置)
[2.1 修改字体为简体中文](#2.1 修改字体为简体中文)
[2.2 添加拓展插件](#2.2 添加拓展插件)
[2.2.1 下载其他监听器](#2.2.1 下载其他监听器)
[2.2.2 下载线程组插件](#2.2.2 下载线程组插件)
[3. JMeter 基本使用流程](#3. JMeter 基本使用流程)
[3.1 启动 JMeter](#3.1 启动 JMeter)
[3.2 添加 "线程组"](#3.2 添加 "线程组")
[3.3 添加 "HTTP" 取样器](#3.3 添加 "HTTP" 取样器)
[3.4 填写 "HTTP 请求" 的相关请求数据](#3.4 填写 "HTTP 请求" 的相关请求数据)
[3.5 添加 "查看结果树" 监听器](#3.5 添加 "查看结果树" 监听器)
[3.6 启动测试并查看接口测试结果](#3.6 启动测试并查看接口测试结果)
[4. JMeter 元件作用域和执行顺序](#4. JMeter 元件作用域和执行顺序)
[4.1 JMeter 作用域](#4.1 JMeter 作用域)
[4.2 JMeter 执行顺序](#4.2 JMeter 执行顺序)
[5. 重要组件](#5. 重要组件)
[5.1 线程组](#5.1 线程组)
[5.2 HTTP 取样器](#5.2 HTTP 取样器)
[5.3 查看结果树](#5.3 查看结果树)
[5.4 HTTP Cookie 管理器](#5.4 HTTP Cookie 管理器)
[5.5 HTTP 请求默认值](#5.5 HTTP 请求默认值)
[5.6 用户定义的变量](#5.6 用户定义的变量)
[5.7 CSV 数据文件设置](#5.7 CSV 数据文件设置)
[5.7.1 csv 数据文件设置](#5.7.1 csv 数据文件设置)
[5.7.2 编写 test.csv 文件](#5.7.2 编写 test.csv 文件)
[5.7.3 修改登录接口及其他涉及到 username 和 password 获取的参数](#5.7.3 修改登录接口及其他涉及到 username 和 password 获取的参数)
[5.7.4 修改线程组中线程数, 使得每次取到的 username 和 password 都不一样](#5.7.4 修改线程组中线程数, 使得每次取到的 username 和 password 都不一样)
[5.8 JSON 提取器](#5.8 JSON 提取器)
[5.8.1 部分JSON 操作符](#5.8.1 部分JSON 操作符)
[5.8.2 添加 JSON 配置](#5.8.2 添加 JSON 配置)
[5.8.3 配置 JSON 提取的参数](#5.8.3 配置 JSON 提取的参数)
[5.9 JSON 断言](#5.9 JSON 断言)
[5.9.1 添加 JSON 断言](#5.9.1 添加 JSON 断言)
[5.9.2 添加 JSON 断言配置](#5.9.2 添加 JSON 断言配置)
[5.10 同步定时器 (集合点)](#5.10 同步定时器 (集合点))
[5.11 事务控制器](#5.11 事务控制器)
[5.12 其他常用监听器](#5.12 其他常用监听器)
[5.12.1 Stepping Thread Group](#5.12.1 Stepping Thread Group)
[5.12.2 聚合报告](#5.12.2 聚合报告)
[5.12.3 Response Times Over Time 监听器](#5.12.3 Response Times Over Time 监听器)
[5.12.4 Transaction per Second (TPS)](#5.12.4 Transaction per Second (TPS))
[6. 测试报告](#6. 测试报告)
[6.1 生成性能测试报告的命令](#6.1 生成性能测试报告的命令)
[6.2 查看测试报告](#6.2 查看测试报告)
JMeter
1. JMeter 安装
1.1 点击官网下载: JMeter官网下载


1.2 下载后解压即可
1.3 打开 JMeter
// 先找到解压后的目录, 然后点开 bin 目录, 找到 jmeter.bat 文件
1.3.1 方式一: 点击对应程序打开

1.3.2 方式二: 命令行启动
// 添加 PATH 变量
- 右键此电脑, 点击属性(Win11系统)

- 找到高级系统设置并点击

- 按照步骤配置环境变量(路径要对, 并且对应到 bin 目录下面)

// 保存后使用命令行工具打开 (win + R 然后 输入 cmd 回车)

// 在命令行直接输入 jmeter 回车就可以打开了

1.4 关闭 JMeter
// 直接关闭黑窗口就可以关闭了
2. JMeter 基础配置
2.1 修改字体为简体中文
// 找到 bin 目录下的 jmeter.properties 文件, 右键使用记事本打开
// 找到下面这行内容, 将 # 号删除, 然后 language 改为 zh_CN
// 保存 (Ctrl + S), 然后重新打开 JMeter 就好了

2.2 添加拓展插件
// 点击进入插件下载网页

// 点击下载后重新打开 JMeter, 我们会发现右上角有了一个小蝴蝶图标, 点击进入, 按照需求下载相关插件即可

2.2.1 下载其他监听器

2.2.2 下载线程组插件

// 下载完之后点击右下角这个, 等待重启就可以了

3. JMeter 基本使用流程
3.1 启动 JMeter
3.2 添加 "线程组"
// 在 "测试计划" 目录下面 右键 添加

3.3 添加 "HTTP" 取样器
// 在 "线程组" 目录下面 右键 添加

3.4 填写 "HTTP 请求" 的相关请求数据
3.5 添加 "查看结果树" 监听器

3.6 启动测试并查看接口测试结果
// 右上角可以看测试用时和已完成任务数

4. JMeter 元件作用域和执行顺序
4.1 JMeter 作用域
// 主要由测试计划中的树形结构中的元件父子关系来确定
// 有明确的父子关系,就好像文件夹一样, 到哪一级才能访问同级下的文件
4.2 JMeter 执行顺序
// 取样器元件内组件不依赖其他元件就可执行, 因此取样器不存在作用问题
// 元件 作用域支队它的子节点有作用
// 其它作用域默认根据测试计划中树形结构来决定
5. 重要组件
5.1 线程组
// 控制 JMeter 将用于执行测试的线程数, 也可以把一个线程理解成一个测试用户

// 线程数: 一个线程即一个测试用户, 设置发送的请求次数
// Ramp-Up 时间 (秒) : 设置性能测试运行时间, 单位为秒
// 循环次数: 1) 配置指定次数: 控制脚本循环执行的次数; 2) 配置循环永远: 需要调度器配合使用; 运行时间即脚本执行时间; 延迟启动时间即脚本等待指定时间才能运行
5.2 HTTP 取样器
// 添加必须的配置: 1) http 协议: http 主机名/IP; 2) 端口: http 协议端口 + https 端口号; 3) 请求方法: 路径 (目录 + 参数); 内容编码 (默认的 ISO 国际标准, 但是对中文不太友好, 可以使用 utf-8); 4) 参数: 参数可以拼在路径里, 也可以写在参数中
5.3 查看结果树

// 取样器结果: 统计请求相关的信息
// Thread Name: 线程组名称
// Sample time: 发送请求时间
// load time: 响应时间
// Response code : 接口响应状态码
5.4 HTTP Cookie 管理器

// HTTP Cookie 管理器想 Web 浏览器一样存储和发送 Cookie
// 如果 HTTP 请求并响应包含 Cookie, 则 Cookie 管理器会自动存储该 Cookie, 并将其用于将来对该特定网站的所有请求
// 每个 JMeter 线程都有自己的 "Cookie存储区", 因此, 正在测试使用 Cookie 存储会话信息的网站, 则每个 JMeter 线程豆浆拥有字节的会话
// 此类 Cookie 不会显示在 Cookie 管理器显示屏上, 可以使用 "查看结果树监听器" 查看
// 缓存配置可选择 standard (标准) 或 compatibility (兼容的), 当然也可以手工添加一下 Cookie
// 添加了 HTTP Cookie 管理器后, 会自动存储并发送 Cookie
5.5 HTTP 请求默认值

// 测试时如果涉及到的接口协议, IP, 端口号 全都一样, 可以单独抽取出来, 存放在默认值中, 其它接口就可以省略不写这些内容, 提高测试效率
5.6 用户定义的变量

// 可以自定义一个变量, 用来表示常用的一些变量, 当这些变量在多个脚本使用时, 用自定义的变量方便管理和修改
5.7 CSV 数据文件设置

5.7.1 csv 数据文件设置
// 文件名: 填写 csv 文件的路径, 建议使用绝对路径 (在文件系统或网络环境中,从根目录或起始位置开始,完整地指定一个文件或目录位置的路径表示方法)
// 文件编码 UTF-8
// 变量名称: 从 csv 数据文件中读起的数据需要保存到的变量名, 有多个变量时用逗号隔开
// 是否忽略首行: 是否从 csv 数据文件第一行开始读取
// 分隔符: 要求与 csv 数据文件中多列的分隔符一致
// 遇到文件结束符再次循环: 若选择为 True, 当数据不够的时候会从头去取; 若选择 False, 则需要勾选羡慕的配置, 遇到文件结束符停止线程, 如果不勾选, 请求会报错
5.7.2 编写 test.csv 文件
// 使用 Excel 编写后保存为 test.csv 文件

5.7.3 修改登录接口及其他涉及到 username 和 password 获取的参数

// 修改完配置后, 登录接口发起请求时将从 csv 文件中获取配置好的 username 和 password 参数, 获取顺序为从上到下依次获取
5.7.4 修改线程组中线程数, 使得每次取到的 username 和 password 都不一样
5.8 JSON 提取器

// 针对某一个 HTTP 请求接口添加 JSON 提取器
5.8.1 部分JSON 操作符
|-----------------------------|---------------------|
| Operator | Description |
| $ | 表示根元素 |
| @ | 当前元素 |
| * | 通配符, 所有节点 |
| .. | 选择所有符合条件的节点 |
| .<name> | 子元素 |
| ['<name>'(,'<name>')] | 括号表示子元素或子元素列表 |
| [<number>(,<number>)] | 数组索引或索引列表 |
| [start:end] | 数组切片操作符 |
| [?(<expression>)] | 过滤器表达式, 表达式必须评估为布尔值 |
// 想了解更加全面的可以参考:参考文档
// 获取相应中的所以 blogId 元素: $..blogId
// 获取第一个 blogId 元素: $.[0]blogId
5.8.2 添加 JSON 配置

5.8.3 配置 JSON 提取的参数

5.9 JSON 断言
// 接口发送请求成功, 响应码为 200 并不能完全代表接口请求成功, 我们更多的是需要关注接口响应数据是否符合预期
5.9.1 添加 JSON 断言

// 针对某一个 HTTP 请求接口添加 JSON 断言
5.9.2 添加 JSON 断言配置

// 若不选 Additionally assert value, 表示添加断言值, 则可用来判断字段是否存在
// 选择 Additionally assert value, 则必须添加 Expected Value 期望的断言值
// 若不选择 Match as regular expression (正则匹配), 则 Expected Value 必须填写完整, 少一个字符都会导致断言失败
// 若选择 Match as regular expression 正则匹配, 则 Expected Value 可以仅写上部分关键词即可断言成功
5.10 同步定时器 (集合点)
// 为了达到并发的效果, 需要添加同步定时器

// JMeter 同步定时器的作用主要在于模拟多用户并发访问的场景, 确保多个线程能够同时执行某个操作, 以达到真正的并发效果
// 当多个线程同时启动时, 它们可能会在不同的时间间隔内执行, 这样就无法达到真正的并发效果, 同步定时器的作用就是将这些线程的执行时间同步, 使他们在同一时间点执行, 他可以在多个线程之间制造一定的延迟, 直到同时到达指定时间点, 再同时执行后续的操作
// 在性能测试过程中, 为了真实模拟多个用户同时进行操作以度量服务器的处理能力, 可以使用同步定时器来设置集合点. 不过, 虽然通过加入集合点可以约束请求同时发送, 但不能确保请求同时到达服务器, 所以只能说是较真实模拟并发
5.11 事务控制器
// JMeter事务控制器的作用主要用于测试执行嵌套测试元素所花费的总时间, 这相当于模拟用户进行一系列操作的测试
// 在进行页面性能测试或 API 性能测试时, 事务控制器可以帮助测试人员更准确地评估系统性能, 尤其是在涉及多个接口或操作的复杂场景中

5.12 其他常用监听器
5.12.1 Stepping Thread Group
// 使用前提: 之前插件安装好, 并且获取了这个监听器


// This group will start: 启动多少个线程, 同线程组中的线程数
// First, wait for:等待多少秒才开始压测, 一般默认为 0
// Then start: 一开始有多少个线程数, 一般默认为 0
// Next, add: 下一次增加多少个线程数
// thread every: 当前运行多长时间后再次启动线程, 即每一次线程启动完成之后的持续时间
// using ramp-up: 启动线程的时间; 若设置为 5 秒, 表示每次启动线程都持续 5 秒
// Then hold load for: 线程全部启动完之后持续运行多长时间
// Finally, stop / thread every: 多产时间释放多少个线程; 若设置为 5 个 和 1 秒, 表示 持续负载结束之后每 1 秒钟释放 5 个线程
5.12.2 聚合报告
// 从聚合报告可以看到性能测试过程中整体的数据变化


5.12.3 Response Times Over Time 监听器
// Response Times Over Time 主要用于监听整个事务运行期间的响应时间, 在测试过程中, 它可以帮助测试人员观察并分析响应时间的实时平均值以及整体响应时间的走向, 通过这一监听器, 测试人员能够更加直观地了解系统在不同时间点的响应性能, 从而法相可能存在的性能问题或瓶颈


// Response Times Over Time 的图形展示中, 横坐标通常代表运行时间, 而纵坐标则代表响应时间(单位毫秒), 测试人员可以根据图形中的趋势线来判断响应时间的稳定性以及是否存在大的波动
5.12.4 Transaction per Second (TPS)
// JMeter 中的Transaction per Second 监听器是一个用于分析系统吞吐量的重要工具
// TPS: 每秒事务数, 表示一个客户机向服务器发送请求后服务器做出反应的过程
// TPS 值越高, 说明系统的处理能力越强


// 使用 TPS 监听器时, 横坐标通常代表运行时间, 而纵坐标则代表 TPS 值
6. 测试报告
// JMeter 测试报告是一个全面而详细的文档, 它提供了关于测试执行结果的详细信息, 帮助用户全面评估系统的性能并进行性能优化
6.1 生成性能测试报告的命令
// 格式: JMeter -n -t 脚本文件 - l 日志文件 -e -o 目录
// 示范: JMeter -n -t HTTP性能测试.jmx -l rezhi.jtl -e -o 日志/.

// 日志文件和目录可以不存在, 如已存在, 必须保证为空, 否则会报错
6.2 查看测试报告
// 命令执行成功后, 性能测试报告生成, 在 rizhi 文件夹下
// 双击 index.html 文件, 就会在网页展示 性能测试报告详情
