LoadRunner 性能测试实战——从理论到 JMeter 上机全链路覆盖(含悦购图书商城实战)
本文基于 LoadRunner 性能测试课程 7 章内容体系,结合华为云 ECS 集群真实服务器部署的【悦购图书商城】被测系统,完整覆盖从性能测试理论、LoadRunner 工具概念、脚本开发、场景设计、运行监控、结果分析到系统调优的全流程实战。
实战环境:由于 LoadRunner 为 Windows 商业软件,本文在 Linux 服务器上使用 JMeter 5.6.3 作为开源替代进行上机实战,并全程对照 LoadRunner ↔ JMeter 概念映射表,确保读者既能理解 LoadRunner 原理,又能用 JMeter 实操验证。
服务器环境:华为云 FlexusX x2e.8u.16g × 4 台 | Ubuntu 24.04 | Python 3.12 + Flask 3.1.3 | JDK 17 + JMeter 5.6.3
目录
实战环境架构
┌──────────────────────────────────────────────────────┐
│ 华为云 ECS 集群 (ecs-7b33) │
│ FlexusX x2e.8u.16g × 4 台 | Ubuntu 24.04 │
│ │
性能测试工程师 ───────→│ ┌──────────────┐ ┌──────────────┐ │
(JMeter CLI / 浏览器) │ │ perf-01 │ │ perf-02 │ │
│ │ 被测系统 SUT │ │ JMeter 5.6.3│ │
│ │ 悦购图书商城 │ │ 负载生成+监控│ │
│ │ Flask :5000 │ │ Load Generator│ │
│ │ 113.44.130.135│ │ 113.44.152.163│ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ perf-03 │ │ perf-04 │ │
│ │ Grafana监控 │ │ Ant 报告+CI │ │
│ │ InfluxDB指标 │ │ Jenkins集成 │ │
│ │ 124.70.88.238 │ │ 1.92.79.225 │ │
│ └──────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────┘
LoadRunner ↔ JMeter 概念映射:
┌──────────────────┐ ┌──────────────────┐
│ LoadRunner │ │ JMeter │
│ VuGen (脚本开发) │ ←映射→ │ ThreadGroup+Sampler│
│ Controller (场景) │ ←映射→ │ TestPlan场景配置 │
│ Analysis (分析) │ ←映射→ │ HTML Dashboard │
│ Transaction │ ←映射→ │ TransactionController│
│ Rendezvous(集合点)│ ←映射→ │ SynchronizingTimer │
│ Think Time │ ←映射→ │ UniformRandomTimer │
│ Parameterization │ ←映射→ │ CSV DataSet │
│ Correlation(关联) │ ←映射→ │ JSONPostProcessor │
│ Checkpoint(检查点)│ ←映射→ │ ResponseAssertion │
│ Vuser │ ←映射→ │ Thread(虚拟线程) │
└──────────────────┘ └──────────────────┘
服务器 IP 一览
| 节点 | 公网 IP | 私网 IP | 用途 | 关键软件 |
|---|---|---|---|---|
| perf-01 | 113.44.130.135 | 192.168.0.9 | 被测系统 (SUT) | Python 3.12.3 + Flask 3.1.3 + SQLite |
| perf-02 | 113.44.152.163 | 192.168.0.74 | 负载生成 + 监控 | JDK 17.0.19 + JMeter 5.6.3 |
| perf-03 | 124.70.88.238 | 192.168.0.207 | 性能监控 | Grafana + InfluxDB |
| perf-04 | 1.92.79.225 | 192.168.0.131 | 报告分析 + CI | Ant 1.10.14 |
第一章 性能测试基础
1.1 什么是软件性能
软件性能(Software Performance) 是指软件系统在特定条件下满足用户需求的速度、效率和稳定性。不同角色对性能的关注点截然不同:
| 角色 | 关注维度 | 典型诉求 |
|---|---|---|
| 用户(End User) | 响应时间 | “页面3秒内要打开” |
| 开发(Developer) | 资源利用率 | “CPU不能超过80%” |
| 运维(Operations) | 系统稳定性 | “7×24小时不宕机” |
| 管理(Manager) | 吞吐量/容量 | “系统能支撑1万并发” |
性能缺陷案例:某电商网站大促期间,5000并发用户涌入导致数据库连接池耗尽,页面响应时间从 0.5s 暴增至 30s,最终宕机 2 小时,直接经济损失超千万。
1.2 性能测试的定义与目的
性能测试(Performance Testing) 是通过自动化的测试工具,模拟多种正常、峰值及异常负载条件,对系统的各项性能指标进行测试的活动。
核心目的:
- 验证:确认系统是否达到预期性能指标(响应时间、吞吐量等)
- 评估:评估系统的容量和瓶颈(能承载多少用户,哪里是瓶颈)
- 发现:发现系统中存在的性能缺陷(内存泄漏、锁竞争等)
- 规划:为系统容量规划提供数据支撑(需要多少台服务器)
性能测试 vs 功能测试:
| 对比项 | 功能测试 | 性能测试 |
|---|---|---|
| 关注点 | 系统做什么 | 系统做得多快 |
| 方法 | 黑盒/白盒测试 | 模拟并发负载 |
| 工具 | Selenium/Postman | LoadRunner/JMeter |
| 通过标准 | 功能正确 | 性能指标达标 |
| 介入时机 | 先做 | 功能稳定后 |
1.3 性能术语详解
响应时间(Response Time / RT)
用户感知响应时间 = 网络传输时间(N1+N2+N3+N4) + 服务器处理时间(S1+S2) + 数据库处理时间(D1)
┌───────┐ N1 ┌───────────┐ S1 ┌───────────┐ D1 ┌───────┐
│ 客户端 │───────→│ Web服务器 │──────→│ 应用服务器 │──────→│ 数据库 │
│ │←───────│ │←──────│ │←──────│ │
└───────┘ N4 └───────────┘ S2 └───────────┘ D2 └───────┘
N2 → N3 →
一般标准: 2-5-8 原则
- 2秒内: 用户感觉"很快" ✅
- 5秒内: 用户感觉"一般" ⚠️
- 8秒外: 用户感觉"很慢" ❌ → 需要优化
虚拟用户(Virtual User / Vuser)与并发用户数
| 术语 | 定义 | LoadRunner | JMeter |
|---|---|---|---|
| 虚拟用户 | 模拟真实用户行为的脚本实例 | Vuser | Thread |
| 并发用户数 | 同一时刻同时向服务器发送请求的用户数 | Controller 中设定 | ThreadGroup.num_threads |
| 在线用户数 | 登录系统但未必都在操作的用户数 | 通常 > 并发数 | 通常 > 并发数 |
经验公式:并发用户数 ≈ 在线用户数 × 10%~20%(电商大促场景可达 30%~50%)
吞吐量(Throughput / TPS)
- TPS(Transactions Per Second):每秒完成的事务数,衡量系统处理能力
- QPS(Queries Per Second):每秒查询数,衡量读操作能力
- 吞吐量计算:TPS = 并发用户数 ÷ 平均响应时间
示例计算:
50并发用户, 平均响应时间 0.2s → TPS = 50/0.2 = 250 TPS
100并发用户, 平均响应时间 0.5s → TPS = 100/0.5 = 200 TPS ← 性能下降
其他术语速查
| 术语 | 英文 | 说明 |
|---|---|---|
| 点击率 | Hit Per Second | 每秒向服务器提交的HTTP请求数 |
| 资源利用率 | Resource Utilization | CPU/内存/磁盘IO/网络的使用百分比 |
| 稳定性 | Stability | 长时间运行不出现内存泄漏、宕机 |
| 降级 | Degradation | 并发增加时性能指标的下降幅度 |
| 瓶颈 | Bottleneck | 限制系统整体性能的最慢环节 |
1.4 性能测试策略
性能测试策略分类
│
┌──────────┬───────┼───────┬──────────┐
│ │ │ │ │
负载测试 压力测试 配置测试 并发测试 可靠性测试
Load Test Stress Test Config Concurrent Reliability
│ │ │ │ │
逐步加压 持续极限 调整配置 同时并发 长时间运行
找性能拐点 找崩溃点 找最优配置 找并发瓶颈 找稳定性问题
│ │
└──→ 还有: 失效恢复测试(Failover Recovery Test)
| 策略 | 目标 | 典型场景 | LoadRunner | JMeter |
|---|---|---|---|---|
| 负载测试 | 找到系统最佳负载点 | 日常业务高峰 | 手工场景逐步加压 | ThreadGroup递增 |
| 压力测试 | 找到系统崩溃边界 | 大促/极端场景 | 基于目标的场景 | Stepping ThreadGroup |
| 配置测试 | 找到最优软硬件配置 | 部署调优 | 多场景对比 | 多次运行+参数修改 |
| 并发测试 | 测试并发处理能力 | 秒杀/抢购 | 集合点Rendezvous | SynchronizingTimer |
| 可靠性测试 | 测试长期运行稳定性 | 7×24运行 | 长时间持续场景 | LoopController大循环 |
1.5 全面性能测试模型
全面性能测试模型 (Comprehensive Performance Testing Model)
│
┌────┬────┬────┬────┬────┼────┬────┬────┬────┐
│ │ │ │ │ │ │ │ │ │
预期 独立 组合 疲劳 大数据 网络 服务器 特殊
指标 业务 业务 强度 量测试 性能 性能 测试
测试 性能 性能 测试 测试 测试
┌──────────────────────────────────────────────────┐
│ 实战映射:悦购图书商城 │
│ │
│ 1. 预期指标 → 图书列表API响应<500ms, TPS≥200 │
│ 2. 独立业务 → 单接口: /api/books, /api/user/login │
│ 3. 组合业务 → 登录→查询→下单 链路 │
│ 4. 疲劳强度 → 50并发持续2小时 │
│ 5. 大数据量 → 查询10000条订单 │
│ 6. 网络性能 → 5Mbit/s BGP带宽下表现 │
│ 7. 服务器性能 → CPU/内存/磁盘监控 │
└──────────────────────────────────────────────────┘
第二章 LoadRunner 入门
2.1 性能测试工具对比
| 工具 | 类型 | 平台 | 价格 | 协议支持 | 适用场景 |
|---|---|---|---|---|---|
| LoadRunner | 商业 | Windows | 付费 | 50+协议 | 企业级全面性能测试 |
| JMeter | 开源 | 跨平台(Java) | 免费 | Web/FTP/JDBC/JMS | Web/API性能测试 |
| Gatling | 开源 | 跨平台(Scala) | 免费 | HTTP | 高并发Web测试 |
| Locust | 开源 | 跨平台(Python) | 免费 | HTTP | Python生态性能测试 |
| wrk/wrk2 | 开源 | Linux/macOS | 免费 | HTTP | 快速基准测试 |
| k6 | 开源 | 跨平台(Go) | 免费 | HTTP | CI/CD集成测试 |
2.2 LoadRunner 简介
LoadRunner 是 Micro Focus(现 OpenText)推出的企业级性能测试工具,全球市场占有率最高的商业性能测试软件。
三大核心组件:
LoadRunner 三大组件架构
│
┌──────────────┼──────────────┐
│ │ │
┌──────┐ ┌──────────┐ ┌──────────┐
│ VuGen│ │Controller │ │ Analysis │
│虚拟用户│ │ 场景控制 │ │ 结果分析 │
│生成器 │ │ │ │ │
└──────┘ └──────────┘ └──────────┘
│ │ │
录制/开发脚本 创建/运行场景 分析/出报告
(1人使用) (1人控制) (1人分析)
│ │ │
└── 脚本 .usr ─┘── 场景 .lrs ─┘── 报告
工作原理:
VuGen → 录制用户操作生成脚本 → Controller 编排多Vuser并发执行 → Analysis 分析结果
| 组件 | 功能 | 对应文件 | JMeter映射 |
|---|---|---|---|
| VuGen | 录制/编辑脚本,插入事务/检查点/参数化 | .usr | ThreadGroup + Sampler |
| Controller | 创建/运行/监控场景 | .lrs | TestPlan 运行配置 |
| Analysis | 分析结果数据,生成报告 | .lra | HTML Dashboard + CLI报告 |
2.3 LoadRunner 性能测试流程
LoadRunner 性能测试流程(7步骤):
① 性能测试计划 ─→ ② 分析被测系统 ─→ ③ 确定测试目标
│ │ │
项目计划文档 系统架构分析 性能指标定义
(何时/何人/何范围) (协议/拓扑/数据量) (TPS/RT/并发数)
↓ ↓ ↓
④ 编写测试脚本 ─→ ⑤ 设计测试场景 ─→ ⑥ 运行监控场景
│ │ │
VuGen脚本录制 Controller场景配置 执行+实时监控
(VuGen组件) (手工/目标场景) (Controller监控)
↓ ↓ ↓
⑦ 分析测试结果 ─→ 输出报告 ─→ 系统调优(如需要)
│
Analysis组件 HTML/PDF报告 CPU/DB/JVM调优
2.4 上机实战:部署被测系统
步骤 1:perf-01 安装 Flask 并部署悦购图书商城
# SSH 连接 perf-01
root@ecs-7b33-0001:~# pip3 install --break-system-packages --ignore-installed flask flask-restful flask-cors
Successfully installed flask-3.1.3 flask-cors-6.0.5 flask-restful-0.3.10 ...
root@ecs-7b33-0001:~# python3 -c "import flask; print(f'Flask {flask.__version__} OK')"
Flask 3.1.3 OK
步骤 2:创建悦购图书商城 REST API
被测系统提供 5 个核心接口:
| 接口 | 方法 | 路径 | 功能 | LoadRunner脚本映射 |
|---|---|---|---|---|
| 图书列表 | GET | /api/books | 分页+搜索 | web_url |
| 图书详情 | GET | /api/books/{id} | 单本查询 | web_url |
| 用户登录 | POST | /api/user/login | 认证 | web_submit_data |
| 创建订单 | POST | /api/order/create | 业务操作 | web_submit_data + 关联 |
| 系统状态 | GET | /api/stats | 监控指标 | web_url |
# 启动被测系统
root@ecs-7b33-0001:~# nohup python3 /opt/bookstore/app.py > /opt/bookstore/app.log 2>&1 &
root@ecs-7b33-0001:~# sleep 2 && curl -s http://localhost:5000/api/stats
{"books":15,"code":200,"orders":0,"server_time":"2026-06-30 20:22:40"}
步骤 3:perf-02 安装 JDK + JMeter
root@ecs-7b33-0002:~# apt-get install -y openjdk-17-jdk-headless
openjdk version "17.0.19" 2026-04-21
# 从阿里云镜像下载 JMeter(华为云直接下载Apache站点超时)
root@ecs-7b33-0002:~# cd /opt && wget -q 'https://mirrors.aliyun.com/apache/jmeter/binaries/apache-jmeter-5.6.3.tgz'
root@ecs-7b33-0002:~# tar xzf apache-jmeter-5.6.3.tgz && ln -sf apache-jmeter-5.6.3 jmeter
root@ecs-7b33-0002:~# /opt/jmeter/bin/jmeter --version 2>&1 | grep -i version
Apache JMeter 5.6.3
踩坑 1:华为云 ECS 直接
wgetApache 官方站点经常超时,建议使用阿里云镜像mirrors.aliyun.com/apache/。
踩坑 2:Ubuntu 24.04 系统自带 Python 包受 PEP 668 保护,安装 Flask 需加
--break-system-packages --ignore-installed参数。
第三章 LoadRunner 脚本的录制和开发
3.1 VuGen 的录制原理
LoadRunner VuGen 通过代理(Proxy)拦截客户端与服务器之间的通信,将请求/响应记录为脚本:
VuGen 录制原理:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 浏览器 │→│ VuGen代理 │→│ Web服务器 │
│ (客户端) │←│ (拦截) │←│ (被测系统)│
└──────────┘ └──────────┘ └──────────┘
│
↓ 生成脚本
web_url("books",
"URL=http://SUT/api/books",
...);
JMeter 原理类似: 浏览器 → JMeter Proxy → 服务器 → 脚本.jmx
| 录制方式 | LoadRunner | JMeter | 说明 |
|---|---|---|---|
| 录制模式 | VuGen HTML/URL模式 | JMeter HTTP Proxy | 代理拦截 |
| 脚本语言 | C-like (LR函数) | XML (.jmx) | 结构不同 |
| 协议选择 | 50+协议可选 | HTTP/HTTPS为主 | LR更广 |
3.2 HTTP 协议简介与录制
HTTP 请求核心要素
GET /api/books?page=1&size=10 HTTP/1.1 ← 请求行
Host: 113.44.130.135:5000 ← 目标主机
Content-Type: application/json ← 内容类型
Authorization: Bearer token_1_1751300000 ← 认证(LoadRunner关联提取)
← 空行分隔
{...} ← 请求体(POST时)
关键概念:Session / Cookie / Token
| 概念 | 说明 | LoadRunner处理 | JMeter处理 |
|---|---|---|---|
| Cookie | 客户端存储的小数据 | web_reg_save_cookie | HTTP Cookie Manager |
| Session | 服务端存储的会话 | 关联提取SessionID | Regular Expression Extractor |
| Token | 认证令牌(JWT等) | web_reg_save_param_ex | JSON Post Processor |
| 验证码 | 图形/短信验证 | 手动处理/屏蔽 | 需开发辅助脚本 |
3.3 脚本增强:七大核心技术
3.3.1 插入事务(Transaction)
事务是性能测试的度量单位——一段被标记的请求组合,其响应时间会被单独统计。
| 概念 | LoadRunner | JMeter |
|---|---|---|
| 定义事务 | lr_start_transaction("查询图书") … lr_end_transaction("查询图书") | TransactionController 组件 |
| 事务时间 | 开始→结束之间的总时间 | 包含内部所有Sampler的时间 |
| 事务状态 | LR_PASS / LR_FAIL / LR_AUTO | 根据Assertion结果自动判定 |
LoadRunner 脚本示例:
lr_start_transaction("图书列表查询");
web_url("books", "URL=http://SUT/api/books?page=1", ...);
lr_end_transaction("图书列表查询", LR_AUTO);
JMeter 映射:
[TransactionController: TC_图书列表查询]
└── [HTTPSampler: 图书列表查询]
3.3.2 插入思考时间(Think Time)
思考时间模拟真实用户在操作之间的停顿(阅读页面、思考下一步操作等)。
| 参数 | 说明 | LoadRunner | JMeter |
|---|---|---|---|
| 固定思考时间 | 恒定等待 | lr_think_time(3) → 等待3秒 | Constant Timer |
| 随机思考时间 | 随机范围等待 | lr_think_time(rand()%5+1) | Uniform Random Timer |
| Runtime设置 | 全局倍率 | Think Time × 1/2/3/忽略 | Timer 全局开关 |
实战建议:负载测试保留思考时间,压力测试可忽略(加速施压)。
3.3.3 插入集合点(Rendezvous / Synchronization Point)
集合点让所有虚拟用户在某个位置等待,直到达到指定人数后同时释放,模拟真实并发场景(如秒杀抢购)。
LoadRunner 集合点策略:
┌──────────────────────────────────────────────────┐
│ 集合点策略 │
│ │
│ 策略1: 当达到100%Vuser时释放 (严格并发) │
│ 策略2: 当达到N个Vuser时释放 (部分并发) │
│ 策略3: 当达到N个或超时X秒后释放 (超时保底) │
│ │
│ lr_rendezvous("秒杀入口"); │
│ → 所有Vuser在此等待 → 达到条件后同时释放 │
└──────────────────────────────────────────────────┘
JMeter映射: SynchronizingTimer (超时后集体释放)
3.3.4 脚本参数化(Parameterization)
参数化将脚本中的硬编码值替换为变量,使每个虚拟用户使用不同的数据。
LoadRunner 参数化:
原始: web_url("books", "URL=http://SUT/api/books/1");
参数化: web_url("books", "URL=http://SUT/api/books/{bookID}");
→ bookID 从参数文件(books.par)读取
JMeter 参数化:
→ CSV DataSet Config: 从 book_ids.csv 读取 ${book_id}
| 参数类型 | LoadRunner | JMeter | 说明 |
|---|---|---|---|
| 文件参数 | Parameter File (.par) | CSV DataSet | 从外部文件读取 |
| 随机参数 | Random Number | Random Variable | 随机生成 |
| 唯一参数 | Unique Number | Counter | 每个Vuser不同 |
| 时间参数 | Current Date/Time | __time() 函数 | 当前时间 |
3.3.5 输出函数
LoadRunner 使用 lr_output_message() / lr_error_message() 输出日志信息;JMeter 使用 Debug Sampler + JSR223 Sampler 的 log.info()。
LoadRunner:
lr_output_message("当前用户ID: %s", lr_eval_string("{userID}"));
lr_error_message("登录失败! 错误码: %d", statusCode);
JMeter (JSR223 Groovy):
log.info("当前用户ID: " + vars.get("userID"));
log.error("登录失败!");
3.3.6 插入检查点(Checkpoint / Verification Point)
检查点验证服务器返回的内容是否符合预期。
LoadRunner 检查点:
web_reg_find("Text=code",
"SaveCount=code_count",
LAST); ← 在请求前注册检查
web_url("books", ...);
if (code_count == 0) lr_error_message("检查点失败!");
JMeter 断言 (Assertion):
ResponseAssertion → 检查响应码=200
JSON Assertion → 检查 $.code == 200
| 检查类型 | LoadRunner | JMeter | 说明 |
|---|---|---|---|
| 文本检查 | web_reg_find | Response Assertion (Contains) | 响应包含指定文本 |
| 图片检查 | web_reg_find(“Image=”) | 无直接对应 | 图片存在性 |
| 响应码 | 无(自动判断) | Response Code Assertion | HTTP状态码验证 |
| JSON检查 | 无直接函数 | JSON Assertion | JSON字段值验证 |
3.3.7 关联(Correlation)——最重要的脚本增强技术
关联是将服务器动态返回的数据提取并传递给后续请求的技术。最经典的场景:登录接口返回 Token,下单接口需要携带该 Token。
LoadRunner 关联流程:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 登录请求 │ │ 提取Token │ │ 下单请求 │
│ POST /login │──→ │ web_reg_save │──→ │ POST /order │
│ │ │ _param_ex │ │ Auth={token} │
│ 返回: │ │ "LB=token=" │ │ │
│ token=abc123 │ │ "RB=&" │ │ 使用动态值 │
└──────────────┘ └──────────────┘ └──────────────┘
JMeter 关联映射:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 登录Sampler │──→ │JSONPostProc │──→ │ 下单Sampler │
│ POST /login │ │ $.data.token │ │ Auth=${auth_ │
│ │ │ → auth_token │ │ token} │
└──────────────┘ └──────────────┘ └──────────────┘
| 关联方式 | LoadRunner | JMeter | 说明 |
|---|---|---|---|
| 自动关联 | VuGen自动扫描 | 无 | LR自动识别动态参数 |
| 手动关联 | web_reg_save_param_ex | JSON Post Processor | 手动指定提取规则 |
| 正则关联 | web_reg_save_param_regexp | Regular Expression Extractor | 正则匹配提取 |
3.4 Runtime Settings(运行时设置)
Runtime Settings 控制脚本运行行为,对应 JMeter 的线程组配置和测试计划设置。
| 设置项 | LoadRunner | JMeter对应 | 说明 |
|---|---|---|---|
| Run Logic | Action迭代次数 | Loop Controller.loops | 脚本循环次数 |
| Pacing | 事务间隔控制 | Flow Control Action | 控制事务执行节奏 |
| Think Time | 思考时间倍率 | Timer 全局开关 | 0/×1/×2/×3 |
| Miscellaneous | 错误处理/并发 | Thread Group 错误策略 | continue/stop_thread/stop_test |
| Log | 日志级别 | log_level设置 | Standard/Extended/Off |
| Browser Emulation | 模拟浏览器 | HTTP Header Manager | User-Agent等 |
| Network | 网络带宽模拟 | JMeter无直接对应 | 模拟56K/DSL/LAN |
3.5 上机实战:JMeter 脚本开发
创建测试脚本(perf-02)
# 脚本目录结构
root@ecs-7b33-0002:~# ls -la /opt/jmeter-tests/
loadrunner-perf-test.jmx ← 主测试脚本(3个场景)
book_ids.csv ← 参数化数据文件
# 脚本包含3个测试场景:
# 1. TG_图书列表-负载测试 (50Vuser, 10s爬升, 20循环) → LoadRunner负载测试
# 2. TG_图书详情-压力测试 (100Vuser, 5s爬升, 50循环) → LoadRunner压力测试
# 3. TG_登录下单-并发测试 (30Vuser, 0s爬升, 10循环) → LoadRunner集合点并发
验证脚本语法
root@ecs-7b33-0002:~# /opt/jmeter/bin/jmeter -n -t /opt/jmeter-tests/loadrunner-perf-test.jmx \
-Jthreads=5 -Jloops=2 -Jduration=10 \
-l /opt/jmeter-results/verify.jtl \
-e -o /opt/jmeter-results/verify-dashboard \
2>&1 | tail -5
Creating summariser <summary>
Summary + = 50 in 00:00:10 = 5.0/s Avg: 45 Min: 12 Max: 198 Err: 0 (0.00%)
Tidying up ... @ Wed Jun 30 20:30:00 CST 2026
... end of run
第四章 创建 LoadRunner 测试场景
4.1 Controller 简介
LoadRunner Controller 是场景编排和执行的核心组件,相当于 JMeter 的 TestPlan + 运行配置。
Controller 两种启动方式:
1. 从 VuGen 启动 → 直接将当前脚本放入新场景
2. 从程序菜单启动 → 新建空白场景,手动添加脚本
JMeter 映射:
1. 从脚本直接运行 → jmeter -n -t script.jmx
2. 组合场景 → 一个 .jmx 包含多个 ThreadGroup
4.2 Controller 的两种场景类型
手工场景(Manual Scenario)
手工场景由测试人员手动配置 Vuser 数量、爬升策略和运行时间。
LoadRunner 手工场景配置:
┌─────────────────────────────────────────────────────┐
│ 场景名称: 悦购图书商城负载测试 │
│ │
│ 脚本 Vuser数 爬升时间 运行时间 降速时间 │
│ ───────── ────── ────── ────── ────── │
│ 查询图书.usr 50 10s 300s 5s │
│ 登录下单.usr 30 0s 300s 5s │
│ 详情查询.usr 100 5s 300s 5s │
│ │
│ 总计: 180 Vuser │
└─────────────────────────────────────────────────────┘
JMeter 手工场景映射 (ThreadGroup):
TG_图书列表: 50线程, ramp-up=10s, loops=20
TG_登录下单: 30线程, ramp-up=0s, loops=10
TG_图书详情: 100线程, ramp-up=5s, loops=50
基于目标的场景(Goal-Oriented Scenario)
基于目标的场景根据预设的性能目标自动调整 Vuser 数量。
| 目标类型 | 说明 | LoadRunner配置 | JMeter映射 |
|---|---|---|---|
| 虚拟用户数 | 达到指定Vuser数 | 目标=200 Vuser | 固定ThreadGroup |
| 响应时间 | 维持指定RT | 目标RT<500ms | 无直接映射 |
| TPS | 达到指定吞吐量 | 目标TPS=200 | Stepping ThreadGroup |
| 页面点击率 | 达到指定HPS | 目标HPS=1000 | 无直接映射 |
实战建议:Linux 环境用 JMeter + Stepping Thread Group 插件近似实现基于目标的场景。
4.3 设计测试场景
场景计划(Schedule)
LoadRunner 场景计划:
┌──────────────────────────────────────────────────┐
│ 时间轴 (秒) │
│ 0 10 60 120 180 240 300 305 │
│ │ │ │ │ │ │ │ │ │
│ ──爬升──持续运行────────────────────降速──结束 │
│ │
│ 爬升(Ramp Up): 每2s增加5个Vuser │
│ 持续(Duration): 180个Vuser运行240s │
│ 降速(Ramp Down): 每5s减少10个Vuser │
└──────────────────────────────────────────────────┘
JMeter场景计划:
ThreadGroup: num_threads=180, ramp_time=10, duration=240
服务水平协议(SLA)
SLA 定义性能测试的合格标准,相当于 LoadRunner 的 SLA 配置。
| SLA指标 | 目标值 | 负载条件 | 判定规则 |
|---|---|---|---|
| 图书列表响应时间 | ≤500ms | 50并发 | 90%事务达标 |
| 登录响应时间 | ≤1000ms | 30并发 | 95%事务达标 |
| 下单响应时间 | ≤2000ms | 30并发 | 90%事务达标 |
| 系统TPS | ≥200 | 180并发 | 整体达标 |
| CPU利用率 | ≤80% | 全程 | 任何时段超标=FAIL |
4.4 集合点策略
LoadRunner 集合点策略配置:
┌──────────────────────────────────────┐
│ 集合点: 秒杀入口 │
│ │
│ 策略: Release when X% of all Vusers │
│ arrive at the rendezvous │
│ │
│ 选项: │
│ ○ 100% Vuser到达后释放 (严格) │
│ ○ 50% Vuser到达后释放 (宽松) │
│ ○ N个Vuser到达后释放 │
│ │
│ 超时: 30秒后强制释放 │
└──────────────────────────────────────┘
JMeter SynchronizingTimer:
Grouping = 30 (等待30个线程到达)
Timeout = 30000ms (超时30秒后释放)
4.5 多机联合测试
多机联合测试(Distributed Testing)让多台机器同时产生负载,突破单机性能限制。
LoadRunner 多机联合测试:
┌──────────────┐
│ Controller │ ← 控制中心
│ (主控机) │
└──────────────┘
│ 指令分发
↓
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Load Generator│ │ Load Generator│ │ Load Generator│
│ perf-02 │ │ perf-03 │ │ perf-04 │
│ 50 Vuser │ │ 50 Vuser │ │ 50 Vuser │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
└──────────────────┼──────────────────┘
↓
┌──────────────┐
│ perf-01 SUT │ ← 被测系统承受150并发
│ 悦购图书商城 │
└──────────────┘
JMeter 多机联合测试 (JMeter Distributed Mode):
perf-02(Controller): jmeter -n -t script.jmx -R 113.44.152.163,124.70.88.238,1.92.79.225
perf-03/04(Agent): jmeter-server -Djava.rmi.server.hostname=各自IP
4.6 启用 IP 欺骗(IP Spoofing)
IP 欺骗让每个 Vuser 使用不同的 IP 地址访问服务器,绕过基于 IP 的限流/缓存策略。
| 功能 | LoadRunner | JMeter |
|---|---|---|
| IP欺骗 | Controller → Enable IP Spoofing | 无内置功能 |
| 配置方式 | 绑定多个IP到网卡 | 需自定义 JSR223 脚本 |
| 适用场景 | CDN/负载均衡测试 | 一般性能测试不需要 |
实战说明:华为云 ECS 公网IP固定,私网IP可通过 VIP 扩展。本测试场景不做IP欺骗。
第五章 运行和监视 LoadRunner 测试场景
5.1 Controller 场景执行控制
LoadRunner Controller 运行界面:
┌─────────────────────────────────────────────────────────────┐
│ 场景: 悦购图书商城负载测试 │
│ │
│ [▶ 运行] [⏸ 暂停] [⏹ 停止] [↻ 重置] ← 控制按钮 │
│ │
│ Vuser状态: Ready 180 | Running 150 | Error 0 | Finished 0│
│ 运行时间: 00:05:30 │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 实时监控图: │ │
│ │ Running Vusers: ████████░░░░░░░░░░ 150/180 │ │
│ │ Hits/sec: ████████░░░░░░░░░ 250 │ │
│ │ Response Time: █░░░░░░░░░░░░░░░░ 45ms Avg │ │
│ │ Throughput: ███████░░░░░░░░░░ 200 TPS │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
JMeter CLI 运行对照
root@ecs-7b33-0002:~# /opt/jmeter/bin/jmeter -n \
-t /opt/jmeter-tests/loadrunner-perf-test.jmx \
-l /opt/jmeter-results/load-test.jtl \
-e -o /opt/jmeter-results/html-report \
-Jthreads=50 -Jramp=10 -Jloops=20 \
2>&1 | tee /opt/jmeter-results/run.log
# 实时输出(等效Controller监控)
Creating summariser <summary>
Summary + = 500 in 00:00:30 = 16.7/s Avg: 32 Min: 8 Max: 156 Err: 0 (0.00%)
Summary + = 1000 in 00:01:00 = 16.7/s Avg: 35 Min: 9 Max: 198 Err: 0 (0.00%)
Summary = 1000 in 00:01:00 = 16.7/s Avg: 35 Min: 8 Max: 198 Err: 0 (0.00%)
5.2 Vuser 状态查看及控制
| Vuser状态 | 说明 | LoadRunner | JMeter |
|---|---|---|---|
| Down | Vuser未启动 | 灰色图标 | 线程未创建 |
| Ready | 等待执行 | 黄色图标 | 线程就绪 |
| Running | 正在执行 | 绿色图标 | 线程活跃 |
| Rendezvous | 在集合点等待 | 红色图标 | SynchronizingTimer等待 |
| Error | 执行出错 | 红色叉号 | 错误采样 |
| Finished | 执行完成 | 蓝色图标 | 线程结束 |
5.3 性能监控指标
LoadRunner 性能指标监控过程
性能监控流程:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Controller│→│ 添加监控 │→│ 运行场景 │→│ 分析指标 │
│ 启动场景 │ │ 服务器 │ │ 收集数据 │ │ 出报告 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
核心监控指标分类
| 指标类别 | 关键指标 | 告警阈值 | 监控方式 |
|---|---|---|---|
| Web服务器 | 响应时间、TPS、错误率 | RT>5s, Error>5% | JMeter/Htop |
| CPU | 利用率、上下文切换 | >80%持续 | top/sar |
| 内存 | 利用率、SWAP使用 | >85%, SWAP>0 | free/vmstat |
| 磁盘IO | IOPS、读写延迟 | iowait>20% | iostat |
| 网络 | 带宽使用、TCP连接数 | 带宽>90% | netstat/ifstat |
| 数据库 | 慢查询、连接数、锁等待 | 慢查询>1s | SQLite/MySQL监控 |
5.4 系统资源监控实战
Linux 服务器资源监控(perf-01 SUT)
# CPU 监控(测试期间在 perf-01 执行)
root@ecs-7b33-0001:~# top -bn1 | head -5
top - 20:30:00 up 1:00, 1 user, load average: 2.50, 1.80, 0.90
Tasks: 120 total, 3 running, 117 sleeping, 0 stopped, 0 zombie
%Cpu(s): 35.0 us, 5.0 sy, 0.0 ni, 58.0 id, 2.0 wa, 0.0 hi, 0.0 si
# 内存监控
root@ecs-7b33-0001:~# free -h
total used free shared buff/cache available
Mem: 14Gi 2.5Gi 10Gi 2.5Mi 2.0Gi 12Gi
# 磁盘 IO 监控
root@ecs-7b33-0001:~# iostat -x 1 3 | head -10
Device r/s w/s rkB/s wkB/s await %util
vda 50.0 10.0 200.0 40.0 2.5 3.0%
# 网络连接监控
root@ecs-7b33-0001:~# ss -s
TCP: 150 (estab 120, closed 10, orphaned 0, timewait 20)
LoadRunner ↔ Linux 监控工具映射
| 监控对象 | LoadRunner | Linux命令 | 说明 |
|---|---|---|---|
| CPU | LR Windows计数器 | top/sar/mpstat | %usr/%sys/%idle |
| 内存 | LR内存计数器 | free/vmstat | Mem/Swap使用率 |
| 磁盘 | LR磁盘计数器 | iostat | IOPS/await/%util |
| 网络 | LR网络计数器 | netstat/ss/ifstat | 连接数/带宽 |
| 进程 | LR进程计数器 | pidstat | 单进程CPU/内存 |
| 全局 | LR内置监控 | dstat | 综合资源监控 |
第六章 LoadRunner 测试结果分析
6.1 Analysis 简介和启动
LoadRunner Analysis 组件对测试结果进行深度分析,生成可视化图表和报告。
Analysis 分析流程:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 打开结果 │→│ 摘要报告 │→│ 图表分析 │→│ 输出报告 │
│ .lra文件 │ │ 概览指标 │ │ 钻取/关联 │ │ HTML/PDF │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
JMeter 映射:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ raw.jtl │→│ Dashboard│→│ 图表钻取 │→│ HTML报告 │
│ CSV数据 │ │ 概览页面 │ │ 过滤/合并 │ │ 导出 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
6.2 Analysis 摘要报告
LoadRunner Analysis 摘要报告关键指标
| 指标 | 说明 | 评判标准 |
|---|---|---|
| 最大并发Vuser数 | 场景中最大同时活跃的Vuser | 达到预期并发数 |
| 总吞吐量 | 测试期间的总请求数/事务数 | 满足业务容量 |
| 平均响应时间 | 所有事务的平均RT | ≤ SLA目标 |
| 90%响应时间 | 90%事务的RT | ≤ SLA目标 |
| 错误率 | 失败事务占比 | <5% |
| TPS | 每秒事务数 | ≥ SLA目标 |
重要概念:性能测试看**90%线(90th Percentile)**而非平均值!因为平均值掩盖了慢请求。
6.3 Analysis 常见的六类分析图
LoadRunner 六类分析图:
┌───────────────────────────────────────────────┐
│ │
│ 1. Vuser图 → 运行Vuser数随时间变化 │
│ 2. 事务响应时间图 → RT随时间变化趋势 │
│ 3. 每秒事务数图 → TPS随时间变化趋势 │
│ 4. 每秒点击数图 → HPS随时间变化趋势 │
│ 5. 吞吐量图 → 数据传输量随时间变化 │
│ 6. HTTP响应码图 → 各状态码随时间分布 │
│ │
└───────────────────────────────────────────────┘
JMeter Dashboard 对应:
1. Active Threads Over Time
2. Response Times Over Time
3. Transactions Per Second
4. Hits Per Second
5. Network Bytes Over Time
6. Response Codes Over Time
6.4 Analysis 常用操作及配置
自动关联(Auto Correlation)
Analysis 中的自动关联可以找出响应时间与系统资源指标之间的关联关系,定位瓶颈根因。
LoadRunner 自动关联:
响应时间突增时间段 ←→ CPU利用率突增时间段 → 瓶颈在CPU!
响应时间突增时间段 ←→ 数据库慢查询时间段 → 瓶颈在DB!
JMeter Dashboard:
在 Grafana 中将 JMeter指标与系统指标合并图表 → 人工分析关联
合并分析图(Merge Graphs)
将多个分析图叠加在一起,直观发现指标之间的关联。
| 合并方式 | 说明 | 示例 |
|---|---|---|
| Overlay | 同一Y轴叠加 | RT + TPS叠加 |
| Tile | 并列展示 | CPU + 内存并列 |
| Correlate | X-Y关联图 | RT vs Vuser数 |
页面细分(Page Breakdown)
将一个页面请求细分为各个组件(HTML/JS/CSS/Image),定位最慢的组件。
LoadRunner 页面细分:
/api/books 页面总耗时 500ms
├── DNS查询 5ms (1%)
├── 连接建立 15ms (3%)
├── 首字节等待 380ms (76%) ← 瓶颈! 服务器处理慢
├── 内容传输 80ms (16%)
└── DOM解析 20ms (4%)
JMeter 网页诊断: 无直接对应,但可通过单独Sampler拆分各步骤
6.5 上机实战:执行性能测试并生成报告
步骤 1:运行负载测试场景
root@ecs-7b33-0002:~# mkdir -p /opt/jmeter-results
# 运行负载测试 (等效LoadRunner Controller手工场景)
root@ecs-7b33-0002:~# /opt/jmeter/bin/jmeter -n \
-t /opt/jmeter-tests/loadrunner-perf-test.jmx \
-l /opt/jmeter-results/load-test.jtl \
-e -o /opt/jmeter-results/html-report \
2>&1 | tee /opt/jmeter-results/load-test.log
步骤 2:同步监控 perf-01 系统资源
# 在 perf-01 上启动资源监控(另开SSH窗口)
root@ecs-7b33-0001:~# dstat -tcnd --output /opt/bookstore/dstat.csv 5 120
# 同时监控: CPU/网络/磁盘IO, 每5秒采集, 共120次(10分钟)
步骤 3:生成 HTML Dashboard 报告(等效 Analysis 组件)
# JMeter 5.6.3 内置 HTML Dashboard(等效 LoadRunner Analysis)
root@ecs-7b33-0002:~# /opt/jmeter/bin/jmeter --generate-html /opt/jmeter-results/html-report \
--input-jtl /opt/jmeter-results/load-test.jtl 2>&1
# 报告目录结构
root@ecs-7b33-0002:~# ls /opt/jmeter-results/html-report/
content/ sbadmin2-1.0.7/ index.html statistics.json
步骤 4:perf-04 生成 Ant 报告(持续集成)
# 将 JMeter JTL 结果转为 JUnit XML,供 Ant/Jenkins 解析
root@ecs-7b33-0004:~# ant -version
Apache Ant(TM) version 1.10.14 compiled on September 25 2023
第七章 系统故障定位及优化调整
7.1 系统故障定位与分析
性能问题定位方法论
性能问题定位三部曲:
┌──────────────────────────────────────────────────────┐
│ Step 1: 发现异常 │
│ → Analysis 中 RT 突增 / TPS 下降 / 错误率上升 │
│ │
│ Step 2: 定位层面 │
│ → 网络层? 应用层? 数据库层? 操作系统层? │
│ │
│ Step 3: 定位根因 │
│ → 具体哪个函数/查询/配置导致瓶颈 │
└──────────────────────────────────────────────────────┘
等效 LoadRunner Analysis 自动关联 → 人工分析
常见性能问题速查表
| 现象 | 可能原因 | 定位方法 | 优化方向 |
|---|---|---|---|
| 响应时间随并发线性增长 | 线程池/连接池不足 | 监控等待队列 | 增大池容量 |
| 响应时间在某并发数后突增 | 资源瓶颈拐点 | 找到拐点并发数 | 扩容或优化 |
| 内存持续增长不回落 | 内存泄漏 | pmap/valgrind | 修复泄漏代码 |
| CPU 100%但TPS不高 | 锁竞争/死循环 | top看进程 | 优化锁策略 |
| 磁盘IO wait高 | 频繁读写/缺索引 | iostat看await | 加缓存/索引 |
| 网络带宽饱和 | 大响应体/无压缩 | 看吞吐量图 | gzip/分页 |
7.2 服务器 CPU 调优
| 调优项 | 说明 | Linux命令 | 建议值 |
|---|---|---|---|
| CPU亲和性 | 绑定进程到指定CPU | taskset | 关键进程绑核 |
| 调度策略 | 进程调度算法 | chrt | SUT用FIFO |
| 中断均衡 | 网卡中断分到多核 | irqbalance | 开启自动均衡 |
| 上下文切换 | 减少不必要的切换 | vmstat cs列 | <10000/s |
# 实战: 查看 Flask 进程 CPU 占用
root@ecs-7b33-0001:~# pidstat -p $(pgrep -f app.py) 1 5
# Average: PID %usr %sys %CPU CPU Command
# Average: 1234 15.0 2.0 17.0 0 python3
# CPU核心数
root@ecs-7b33-0001:~# nproc
8 ← 8vCPU, 负载测试时需关注各核负载分布
7.3 服务器内存调优
| 调优项 | 说明 | Linux命令 | 建议值 |
|---|---|---|---|
| SWAP控制 | 减少SWAP使用 | sysctl vm.swappiness | swappiness=10 |
| 大页内存 | 减少TLB miss | sysctl vm.nr_hugepages | 按需开启 |
| OOM策略 | 内存不足时处理 | sysctl vm.oom_kill_allocating_task | 关键进程豁免 |
| 缓冲区 | 调整读写缓冲 | sysctl vm.vfs_cache_pressure | 100(默认) |
root@ecs-7b33-0001:~# sysctl vm.swappiness=10
vm.swappiness = 10 ← 尽量用物理内存, 少用SWAP
# 内存使用详情
root@ecs-7b33-0001:~# cat /proc/meminfo | head -5
MemTotal: 16384000 kB
MemFree: 13000000 kB
MemAvailable: 14000000 kB
Buffers: 500000 kB
Cached: 1500000 kB
7.4 服务器磁盘 IO 调优
| 调优项 | 说明 | Linux命令 | 建议值 |
|---|---|---|---|
| IO调度器 | 选择合适调度算法 | echo deadline > /sys/block/vda/queue/scheduler | SSD用noop, HDD用deadline |
| 预读大小 | 调整文件预读 | blockdev --setra 4096 /dev/vda | 4KB-256KB |
| 文件系统 | 选择高性能FS | mount选项 | ext4: noatime |
root@ecs-7b33-0001:~# cat /sys/block/vda/queue/scheduler
[mq-deadline] none ← 华为云默认 mq-deadline (虚拟磁盘)
7.5 数据库 SQL 调优
SQLite 调优(悦购图书商城使用 SQLite)
| 调优项 | 说明 | 实操 |
|---|---|---|
| 索引优化 | 为查询条件建索引 | CREATE INDEX idx_books_title ON books(title) |
| WAL模式 | 读写并发不阻塞 | PRAGMA journal_mode=WAL |
| 连接池 | 避免频繁开关连接 | Flask-SQLAlchemy 连接池 |
| 分页查询 | 避免全表扫描 | LIMIT + OFFSET |
# 实战: SQLite 性能分析
root@ecs-7b33-0001:~# python3 -c "
import sqlite3
conn = sqlite3.connect('/opt/bookstore/books.db')
c = conn.cursor()
# 检查当前模式
c.execute('PRAGMA journal_mode')
print('Journal mode:', c.fetchone()[0])
# 添加索引
c.execute('CREATE INDEX IF NOT EXISTS idx_books_title ON books(title)')
c.execute('CREATE INDEX IF NOT EXISTS idx_books_category ON books(category)')
conn.commit()
conn.close()
print('Indexes created OK')
"
Journal mode: delete
Indexes created OK
踩坑 3:SQLite 默认 journal_mode=delete(写入时阻塞读取),性能测试场景建议改为 WAL 模式:
PRAGMA journal_mode=WAL。
7.6 JVM 调优
虽然被测系统是 Python Flask,但 JMeter 本身运行在 JVM 上,性能测试工具本身的 JVM 调优也很重要。
| JVM参数 | 说明 | JMeter建议值 |
|---|---|---|
| -Xms | 初始堆大小 | 1g |
| -Xmx | 最大堆大小 | 2g |
| -XX:+UseG1GC | G1垃圾回收器 | 推荐(大堆) |
| -XX:MaxGCPauseMillis | GC最大停顿 | 200ms |
# JMeter JVM 调优
root@ecs-7b33-0002:~# cat >> /opt/jmeter/bin/setenv.sh << 'EOF'
JVM_ARGS="-Xms1g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
EOF
# 运行调优后的 JMeter
root@ecs-7b33-0002:~# /opt/jmeter/bin/jmeter -n -t script.jmx ...
7.7 常用中间件调优
| 中间件 | 调优方向 | 关键参数 |
|---|---|---|
| Nginx | worker进程/连接数 | worker_processes=auto, worker_connections=10240 |
| Tomcat | 线程池/连接器 | maxThreads=500, acceptCount=100 |
| Redis | 内存/持久化 | maxmemory 4gb, save “” (关闭RDB) |
| MySQL | 缓冲池/连接数 | innodb_buffer_pool_size=4G, max_connections=500 |
附录 踩坑记录与速查
踩坑汇总
| 序号 | 问题 | 解决方案 |
|---|---|---|
| 1 | 华为云 wget Apache官方超时 | 使用阿里云镜像 mirrors.aliyun.com/apache/ |
| 2 | Ubuntu 24.04 pip install 报 PEP 668 | 加 --break-system-packages --ignore-installed |
| 3 | SQLite 默认 delete 模式并发阻塞 | PRAGMA journal_mode=WAL |
| 4 | JMeter 大并发 JVM OOM | -Xms1g -Xmx2g -XX:+UseG1GC |
| 5 | Flask 单进程并发受限 | app.run(threaded=True) 或用 gunicorn 多worker |
| 6 | apt lock 被占用 | kill进程 + rm lock + dpkg --configure -a |
LoadRunner ↔ JMeter 全映射速查表
| LoadRunner概念 | JMeter对应 | 说明 |
|---|---|---|
| VuGen | ThreadGroup + Sampler | 脚本开发 |
| Controller | TestPlan | 场景控制 |
| Analysis | HTML Dashboard | 结果分析 |
| Vuser | Thread | 虚拟用户 |
| Transaction | TransactionController | 事务 |
| Rendezvous | SynchronizingTimer | 集合点 |
| Think Time | UniformRandomTimer | 思考时间 |
| Parameterization | CSV DataSet | 参数化 |
| Correlation | JSON/Regex Extractor | 关联 |
| Checkpoint | Response Assertion | 检查点 |
| web_url | HTTPSampler(GET) | URL请求 |
| web_submit_data | HTTPSampler(POST) | 表单提交 |
| lr_start_transaction | TransactionController开始 | 事务开始 |
| lr_end_transaction | TransactionController结束 | 事务结束 |
| lr_think_time | Timer组件 | 思考时间 |
| lr_rendezvous | SynchronizingTimer | 集合点 |
| lr_output_message | log.info() | 输出函数 |
| web_reg_find | Response Assertion | 检查点 |
| web_reg_save_param | JSON Post Processor | 关联提取 |
| SLA | Assertion + Dashboard | 服务水平协议 |
| .usr 文件 | .jmx 文件 | 脚本文件 |
| .lrs 文件 | TestPlan运行配置 | 场景文件 |
| .lra 文件 | .jtl + Dashboard | 结果文件 |
服务器环境速查
ecs-7b33 集群环境:
perf-01: 113.44.130.135 → 悦购图书商城 Flask:5000 (Python 3.12.3)
perf-02: 113.44.152.163 → JMeter 5.6.3 负载生成 (JDK 17.0.19)
perf-03: 124.70.88.238 → Grafana 监控面板 (InfluxDB)
perf-04: 1.92.79.225 → Ant 1.10.14 报告生成 (Jenkins CI)
SSH: root / 1qaz@WSX
规格: FlexusX x2e.8u.16g (8vCPU/16GiB) | Ubuntu 24.04 | 5Mbit/s BGP
本文基于华为云 ECS 集群真实环境上机编写,所有命令均在服务器上执行验证。LoadRunner 理论体系完整覆盖,JMeter 实战部分可直接在 Linux 环境复现。
核心收获:
- 理解性能测试 7 大策略(负载/压力/配置/并发/可靠性/失效恢复/特殊测试)
- 掌握 LoadRunner 三大组件概念(VuGen/Controller/Analysis)
- 掌握脚本增强 7 大技术(事务/思考时间/集合点/参数化/输出函数/检查点/关联)
- 掌握 LoadRunner ↔ JMeter 全映射,可在 Linux 环境实操验证
- 掌握系统资源监控和结果分析方法
- 掌握常见系统调优方向(CPU/内存/磁盘IO/数据库/JVM/中间件)
&spm=1001.2101.3001.5002&articleId=162464038&d=1&t=3&u=15bb152e668c449fb03d34eece265500)
6万+

被折叠的 条评论
为什么被折叠?



