【性能测试】-2- JMeter工具的使用
一、基础脚本搭建
🎯 核心目标:用 JMeter 搭性能测试 “骨架”(测试计划、线程组、取样器、监听器)
- 📋 测试计划:整个测试的 “容器”,所有测试组件都放这里
- 🧵 线程组:模拟多少用户(线程)、多久发请求(调度),像 “并发用户军团”
- 🎲 取样器:具体发什么请求(HTTP、JDBC 等),是 “真实干活的小兵”
- 👂 监听器(查看结果树):调试时看结果(请求是否成功、返回啥数据),但性能测试时要禁用!
→ 为啥?👂监听器超占资源!图形界面(GUI)调试用用就行,真跑性能测试得用命令行(CLI),不然 JMeter 资源被分走,测试结果就不准啦~
二、命令行执行
💻 核心目标:真正跑性能测试时,不用图形界面,用命令行更高效!
- JMeter 默认只给 1G 内存(1g),如果要模拟很多用户,可能不够用~
- 两种命令行玩法:
- 简单版:
jmeter -n -t 脚本.jmx -l 结果.jtl -e -o 报告文件夹
→ 适合快速跑脚本,生成测试报告 - 进阶版:
java -Xms2g -Xmx2g … -jar ApacheJMeter.jar …
→ 手动分配内存(比如给 2G),想咋调就咋调,超灵活!
- 简单版:
三、脚本咋来的?两种姿势
1️⃣ 纯手工写脚本
✍️ 适用场景:接口协议清晰(HTTP、TCP 等)、参数简单,直接对着接口文档写
- 要搞懂:用啥协议?接口咋调用?参数咋传?然后在 JMeter 里一步步填信息,把请求拼出来~
2️⃣ 录制脚本
🎥 适用场景:接口参数复杂、流程多(比如浏览器里点来点去的操作),直接录更方便!
- 咋录?
- 📦 先建 “测试计划”+“线程组”(得有个容器存录制的请求)
- 🔌 开 “HTTP 代理服务器”:设个端口(比如 8888),选好把录制的请求存到哪个线程组里
- 🔐 启动代理 → 生成 CA 证书(让浏览器 / APP 信任这个代理)
- 🎯 在要测试的 APP / 浏览器里,填代理信息(IP + 端口),然后正常操作!
→ JMeter 会自动把你操作的接口请求 “录” 下来,直接变成测试脚本~
四、脚本回放 & 调试
▶️ 核心目标:跑一遍脚本,看看请求对不对、结果准不准!
- 👀 查看结果树:
- 🌱 绿色:网络请求发出去成功了,但结果对不对还得仔细看(比如返回数据是否符合预期)
- 🔴 红色:请求直接失败(网络不通、参数错了…)
- 🔄 HTTP 取样器的 “重定向”:
- 跟随重定向:显示跳转全过程(比如登录→跳首页,每一步都记下来)
- 自动重定向:只显示最终结果(不管中间跳了多少次)
- 🧹 瘦身脚本:回放时,把无关请求(比如页面广告、多余的图片请求)禁用 / 删掉,让测试更聚焦!
五、请求编码:让 JMeter 发对请求
📦 核心问题:发请求时,参数 / 内容编码不对,服务器可能看不懂你的请求(比如中文乱码),得统一编码规则!
1. 通用编码:取样器填 UTF-8
在 JMeter 的 ** 取样器(比如 HTTP 请求)** 里,把「内容编码」设为 UTF-8
→ 作用:让请求体(比如表单、JSON)的编码统一,避免因编码不一致导致服务器解析错误
2. 表单请求(application/x-www-form-urlencoded)
📝 场景:提交登录表单、简单参数时常用这种格式
- 勾上「编码」选项!
→ 为啥?如果参数里有中文 / 特殊字符(比如&
%
),不编码会乱套~
→ 效果:参数会被urlencoded
处理(比如中文转%E4%B8%AD%E6%96%87
),服务器能正确解析
3. JSON 请求(application/json)
📝 场景:接口用 JSON 传参(现在超常见!)
- 必须加 消息头管理器,填
Content-Type: application/json;charset=utf8
→ 作用:告诉服务器 “我发的是 JSON,编码 UTF-8”,避免 JSON 里的中文 / 特殊字符解析错误
4. 文件上传(multipart/form-data)
📝 场景:传图片、Excel 等文件时用
- 请求格式选
POST multipart/form-data
→ 作用:让 JMeter 以 “分块” 方式传文件 + 参数,确保文件内容、文件名编码正确
六、响应编码:解决返回结果乱码
🔍 核心问题:服务器返回的数据,JMeter 看不懂(乱码),尤其是 Windows 电脑!
1. 为啥乱码?
Windows 系统默认编码是 GBK,JMeter 跟着也用 GBK。但如果服务器返回的是 UTF-8 编码的内容,JMeter 用 GBK 解析就会乱码(比如变成 ????
)
2. 咋解决?
改 JMeter 的 全局编码配置:
- 找到 JMeter 安装目录 →
bin
文件夹 → 打开jmeter.properties
文件 - 搜索
sampleresult.default.encoding
,改成:properties
sampleresult.default.encoding=UTF-8
- 重启 JMeter!之后解析响应就用 UTF-8,不乱码啦~
七、变量 & 参数化:让脚本更灵活
🔄 核心目标:脚本里的参数不能写死!要动态变(比如不同用户用不同账号,不同请求用不同参数)
1. 三种传参方式
JMeter 里常用这三类 “变量容器”:
- 📌 用户定义的变量:全局变量,整个测试计划都能用(适合固定值,比如环境地址
https://test-api.com
) - 📌 用户参数:线程组内动态传参(比如每个线程用不同的用户名、密码)
- 📌 属性(Properties):属于 JMeter 工具本身的 “全局变量”,能跨线程组传参!
→ 比如:线程组 1 登录拿到 token,线程组 2 要用这个 token 发请求,就靠属性传递~
2. 性能测试必用:参数化
📝 场景:模拟 100 个用户登录,总不能每个用户的账号密码都手写吧?
- 用 CSV 数据文件设置 或 用户参数,把账号、密码存在文件里,让 JMeter 循环读、动态替换
- 效果:每个线程(用户)用不同的参数,测试更真实(比如模拟 100 个真实用户操作)
3. 属性的特殊用法
💡 跨线程组传参:比如 “登录线程组” 拿到的 token,想给 “下单线程组” 用
- 用函数
__setProperty
把 token 存成属性 - 再用
__P
函数在另一个线程组取这个属性 - 适合 混合场景测试(比如先登录、再下单、再付款,不同步骤拆分线程组)