资讯详情

资讯详情

LoadRunner WebTours性能测试实录:事务建模与参数化实战

简介本资源是一份完整的LoadRunner性能测试实战报告面向软件测试工程师、性能测试初学者及高校相关专业学生聚焦Web应用高并发场景下的系统稳定性与响应能力评估。报告以LR自带的飞机订票系统为被测对象覆盖测试规划、环境搭建、用例设计、脚本录制含login/book事务定义、参数化逻辑与think_time模拟、场景执行及结果分析全流程特别详述登录与航班搜索两大核心功能的性能瓶颈识别与优化依据。资源为单文件Word文档.doc大小447KB内容结构清晰含测试计划时间表、软硬件配置清单、10组账号/航班参数化数据及完整Action脚本代码片段便于复现与教学参考。目前已有105人学习下载适合用于性能测试入门实践、LoadRunner工具实操训练及企业级Web系统压测方案借鉴。1. 这份 LoadRunner 性能测试报告不是模板而是可复现的 B/S 系统压测闭环实录你手头这份标着“LoadRunner性能测试报告.doc”的文档表面看是2015年某次课堂实验的归档材料但拆开细看它完整承载了一个典型 B/S 架构 Web 应用WebTours 飞机订票系统从脚本录制、参数化、事务建模、场景编排到结果解读的全链路实践。它不是空泛的理论框架而是基于真实 LR 11.00 环境、i5-2450M2GB 内存的受限硬件条件跑出来的实测数据——这意味着所有响应时间、吞吐量、Vuser 并发策略都带着明确的软硬件上下文约束。对刚接触性能测试的工程师而言它提供了事务划分逻辑login vs book、think_time 插入位置、参数化字段选择username/password/from/to/b等关键决策点对有经验者则是一份可逆向工程的“最小可行压测单元”你能据此还原出完整的 .usr 脚本结构、.lra 场景配置参数、Analysis 中各图表的数据映射关系。它解决的不是“什么是性能测试”而是“在资源有限、系统简单、目标明确的前提下如何让 LoadRunner 脚本真正驱动出有意义的瓶颈信号”。2. WebTours 脚本的事务建模与参数化为什么 login 和 book 必须拆成两个独立事务2.1 事务边界定义的业务语义依据LoadRunner 中事务Transaction不是技术切分而是业务动作的原子性封装。报告中将login和book显式分离其根本依据在于用户登录成功后获得会话凭证如 Cookie 或 Session ID而订票操作依赖该凭证持续有效。若合并为单事务当登录失败时整个订票流程无法执行但实际生产环境中登录失败与订票失败属于不同层级的问题认证层 vs 业务逻辑层。因此lr_start_transaction(login)和lr_end_transaction(login, LR_AUTO)必须严格包裹在web_submit_form(login.pl, ...)前后确保登录动作的响应时间被独立采集同理book事务覆盖从航班搜索reservations.pl到座位确认reservations.pl_2再到支付提交reservations.pl_3的完整链路。这种拆分直接决定了 Analysis 中事务摘要Transaction Summary能否精准定位瓶颈环节。提示LR_AUTO 参数表示由 LoadRunner 自动判断事务状态HTTP 200 为 Pass非200为 Fail但需注意 WebTours 默认不返回标准 HTTP 状态码实际应配合web_reg_find检查页面关键词如 Welcome 或 Itinerary来校验业务成功否则事务通过率可能失真。2.2 参数化设计的三重验证逻辑报告中明确列出“十个账号”和“十种航班信息”但参数化实现远不止替换变量名。关键在于参数类型选择与取值逻辑参数名参数类型取值来源业务约束说明{username}/{password}Fileusers.datCSV 格式每行一个账号启用“Each iteration”模式确保每个 Vuser 每次迭代取新值避免重复登录冲突{from}/{to}Fileflights.datCSV含 depart/arrive 列必须与{b}航班号强关联否则outboundFlight提交值无效导致订票失败{b}Fileflights.dat同一行的第三列WebTours 后端要求outboundFlight值必须匹配数据库中真实存在的航班记录否则reservations.pl_2返回错误页实际脚本中需在vuser_init()中添加// 初始化参数文件路径相对路径需与 .usr 文件同目录 lr_save_string(C:\\LoadRunner\\Scripts\\WebTours\\users.dat, users_path); lr_save_string(C:\\LoadRunner\\Scripts\\WebTours\\flights.dat, flights_path);并在Action()中调用lr_param_sprintf动态拼接参数名而非硬编码{username}—— 因为 LR 11.00 的 CSV 参数化默认按行读取若users.dat与flights.dat行数不一致如 users.dat 有10行flights.dat 仅5行则第6次迭代开始{b}将返回空值引发web_submit_form提交空字段触发服务器端校验失败。2.3 think_time 的物理意义与配置陷阱脚本中三处lr_think_time()19s、9s、9s、6s并非随意设置而是模拟真实用户操作间隙lr_think_time(19)在web_url(WebTours, ...)后模拟用户打开首页后阅读导航栏、寻找登录入口的时间lr_think_time(9)在web_submit_form(login.pl, ...)后模拟输入账号密码后的确认等待lr_think_time(9)在web_submit_form(reservations.pl, ...)后模拟查看航班列表并选择心仪班次的时间lr_think_time(6)在web_submit_form(reservations.pl_2, ...)后模拟填写乘客信息前的核对时间。注意若在场景中启用“思考时间乘数”Think Time Multiplier需同步调整所有lr_think_time()值。例如乘数设为 0.5则实际等待变为 9.5s/4.5s/4.5s/3s可能打破业务节奏导致请求堆积。报告中未提乘数设置故默认为 1.0。3. 场景配置与 Vuser 调度策略12 个并发用户的阶梯式加载如何暴露线程竞争3.1 Vuser 加载策略的数学建模报告中“每 10 秒增加 2 个 Vuser直至 12 个”对应 LoadRunner 场景配置中的Ramp-up设置Start Vusers: 0Add: 2 Vusers every 10 secondsDuration: 1 minute 30 seconds (90s) after reaching 12 VusersRamp-down: Remove 5 Vusers every 15 seconds该策略可转化为并发用户数函数当t ∈ [0, 50)秒时Vuser(t) floor(t/10) * 2当t ∈ [50, 140)秒时Vuser(t) 12当t ∈ [140, 155)秒时Vuser(t) 12 - floor((t-140)/15)*5。此阶梯式加载比瞬时加压更能暴露系统在负载渐增过程中的拐点。例如若在t30s此时 Vuser6时book事务平均响应时间突增 200%说明系统在 6 并发时已触及数据库连接池上限而若仅做 12 用户一次性加载则可能掩盖该早期瓶颈。3.2 硬件约束下的资源监控基线测试环境为 i5-2450M 2GB RAM该配置对 LoadRunner Controller 和 Load Generator 构成硬限制Controller 端Windows 7 32位最多识别 3.2GB 物理内存但 LR 11.00 进程本身占用约 800MB剩余内存需同时支撑 Analysis 数据库和实时图表渲染Load Generator 端2GB 内存下单台 LG 最多稳定运行 200 VuserHTTP 协议但 WebTours 为本地 IIS 托管实际 LG 与被测服务器共用同一物理机故报告中采用 12 Vuser 是合理规避内存溢出的保守值。验证方法在 Controller 的Runtime Settings → General → Miscellaneous中勾选Enable monitoring of local machine resources运行场景时观察 Windows Performance Monitor 中% Processor Time和Available MBytes计数器。若Available MBytes持续低于 300MB则需降低 Vuser 数或关闭 Analysis 实时刷新。3.3 场景执行日志的关键诊断字段LR 场景日志.log文件中需重点关注以下字段Starting iteration 1 for Vuser 3. Transaction login started. Web request login.pl started. Web request login.pl ended with response code 200. Transaction login ended with status Passed. Transaction book started. Web request reservations.pl started. Web request reservations.pl ended with response code 200. Web request reservations.pl_2 started. Web request reservations.pl_2 ended with response code 500. // 关键错误 Transaction book ended with status Failed.此处response code 500表明reservations.pl_2提交失败结合参数化数据可快速定位{b}值为空或格式错误如包含空格导致后端解析航班号异常。若忽略此日志仅看 Analysis 中的“Book 事务通过率 37/39”会误判为网络抖动而非数据问题。4. Analysis 结果解读从吞吐量与响应时间曲线反推 WebTours 的三层瓶颈4.1 吞吐量Throughput与请求数Hits/sec的耦合关系报告中给出“总吞吐量 1,427,672 字节平均每秒吞吐量 7,068 字节总请求数 1064平均每秒请求数 5.267”。这两个指标必须联合分析计算验证1,427,672 ÷ 7,068 ≈ 202 秒与场景总时长 201 秒3分21秒吻合说明数据采集完整瓶颈定位若Hits/sec持续上升但Throughput增速放缓即每请求平均字节数下降表明服务器开始返回精简响应如错误页、空 JSON指向应用层处理能力饱和WebTours 特例其 HTML 页面平均大小约 15KB而7,068 ÷ 5.267 ≈ 1,342 字节/请求远低于预期说明大量请求因参数错误返回 500 错误页仅含htmlbodyError/body/html约 50 字节印证了前述日志中的reservations.pl_2失败现象。4.2 事务响应时间图的双峰特征分析报告中“平均事务响应时间图”若呈现双峰分布如 login 峰值 1.2sbook 峰值 8.7s需分层排查层级检查项WebTours 典型表现工具网络层Time to First BufferTTFB占比login TTFB 占响应时间 30%book 占 65%LR Analysis → Web Page Diagnostics应用层Time to Last BufferTLB中服务器处理耗时book TLB 中reservations.pl_2耗时占比超 80%IIS 日志time-taken字段数据层SQL 查询执行计划SELECT * FROM FLIGHTS WHERE FLIGHT_NO ?未走索引SQL Server Profiler针对 WebToursreservations.pl_2的慢响应大概率源于FLIGHTS表缺乏FLIGHT_NO索引导致全表扫描。可通过在 IIS 中启用 Failed Request Tracing捕获reservations.pl_2的详细执行栈。4.3 HTTP 响应摘要中的状态码分布陷阱报告提到“HTTP 响应摘要显示每次请求状态”但未给出具体分布。实际 Analysis 中需导出HTTP Responses Summary表格并筛选Status CodeCount关联事务根本原因2001021login, reservations.pl正常响应50043reservations.pl_2, reservations.pl_3{b}参数无效或数据库连接超时4040—路径正确排除部署问题若 500 错误集中出现在reservations.pl_2且与{b}参数值存在强相关性如所有bFL001的请求均失败则问题锁定在参数化数据源而非代码逻辑。5. 基于原始报告的实战优化用现代工具链复现并增强 WebTours 压测能力5.1 脚本迁移从 LR 11.00 C 脚本到 JMeter HTTP 请求链虽报告基于 LR但 WebTours 的 RESTful 特征使其极易迁移到 JMeter。关键转换点Login 请求POST /WebTours/login.plBody Data 为username${username}password${password}Book 请求链GET /WebTours/reservations.pl?depart${from}arrive${to}→ 提取outboundFlight值正则nameoutboundFlight value([^])POST /WebTours/reservations.pl_2Body Data 为outboundFlight${b}reserveFlights.x74reserveFlights.y9POST /WebTours/reservations.pl_3Body Data 为firstNameslastNamescreditCard2expDate2buyFlights.x66buyFlights.y9。JMeter 中使用CSV Data Set Config替代 LR 的参数化文件JSON Extractor替代web_reg_save_param避免 LR 的 C 语法学习成本。5.2 场景增强用 Docker Compose 隔离 WebTours 环境原始报告在 Windows 7 本地运行 WebTours易受环境干扰。现代做法是容器化# docker-compose.yml version: 3.8 services: webtours: image: loadrunner/webtours:11.00 ports: [1080:1080] environment: - DB_HOSTdatabase database: image: mcr.microsoft.com/mssql/server:2019-latest environment: - SA_PASSWORDYourStrongPassw0rd - ACCEPT_EULAY启动后http://localhost:1080/WebTours/即可访问彻底消除本地 IIS 配置差异。5.3 报告升级Allure Prometheus 实现动态指标看板原始报告为静态 Word 文档现可用 Allure 生成交互式报告# JMeter 测试后生成 JTL jmeter -n -t WebTours.jmx -l results.jtl # 转换为 Allure 兼容格式 jtl-reporter --input results.jtl --output allure-results # 启动 Allure 服务 allure serve allure-results再集成 Prometheus 监控容器内 WebTours 的 CPU/MemoryGrafana 绘制login与book的 P95 响应时间热力图实现从“单次报告”到“持续性能基线”的跨越。提示WebTours 的book事务 P95 响应时间若超过 5s即触发告警——这比 LR 报告中笼统的“平均响应时间”更具运维价值。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →