性能测试基础教程(Load runner 2022 R1版)

🎉 准备工作

在开始性能脚本开发前,请确保以下环境已准备就绪:

  • 💻 硬件与系统:推荐 64 位 Windows 10/11,16GB 内存以上。
  • 📦 LoadRunner 安装:使用 LoadRunner 2022 R1 版本,安装时勾选 VuGenControllerAnalysis 三个组件。
  • 🌐 目标应用:确保应用服务已启动,且能从测试机访问。例如:http://192.168.124.19
  • 🔒 网络稳定:关闭不必要的防火墙或 VPN,避免影响网络流量。

🔧新建脚本

  • 🔧 新建脚本:打开 LoadRunner,点击 File > New Script,选择 Web - HTTP/HTML 模板。
  • 📁 命名脚本:为你的脚本命名,例如 xiaohua_test,点击 Finish。

💡 提示:合理的脚本命名能帮助快速定位和管理脚本哦!

🎬准备录制

  1. VuGen 中,点击 录制 按钮。
  2. 选择浏览器类型(如 Edge),填写应用的 URL,例如http://192.168.124.19
  3. 点击 开始录制,此时会自动打开浏览器进行操作。

检查一下设置,如果你之前已经设置好了,可以直接跳过,前往录制过程章节

🌟 小技巧:录制前先清空浏览器缓存和 Cookie,确保录制过程干净无干扰。

🎬 脚本录制

🔐 录制登录流程(vuser_init)

  1. 🎯 选择录制位置:在 VuGen 左侧脚本树中选择 vuser_init 节点
  2. 📊 添加事务:点击 Insert > Start Transaction,命名为 login
  3. 🔑 执行登录操作
    • 在打开的浏览器中输入用户名、密码
    • 点击登录按钮
  4. 📊 结束事务:点击 Insert > End Transaction,选择对应的 login 事务
  5. ⏹️ 暂停录制:完成登录后,点击 VuGen 中的暂停按钮

📌 重要提示:登录功能通常放在 vuser_init 中,这样每个虚拟用户只需登录一次,提高测试效率

🔍 录制业务操作(Action)

  1. 🎯 切换录制位置:选择 Action 节点
  2. 📊 添加查询事务:插入新事务,命名为 chaxun
  3. 🔍 执行查询操作
    • 在应用中进行查询操作
    • 输入查询条件
    • 点击查询按钮
    • 等待查询结果返回
  4. 📊 结束事务:完成查询后结束事务
  5. 🛑 停止录制:点击停止录制按钮

💡 业务建议:Action 部分是真正的业务逻辑,建议录制用户最常用的操作流程

🛠️脚本代码生成与优化

⚡ 代码生成

录制完成后,LoadRunner 会自动进行代码生成:

  1. 等待生成:系统提示"代码生成中",请耐心等待
  2. 📋 查看报告:生成完成后会自动跳转到录制报告
  3. 👀 检查代码:查看生成的脚本代码

代码生成结束会自动跳转到录制报告。

不出意外,那就是要出意外了,生成了这么多代码,这不是头都要晕了吗

🧹 代码精简

生成的代码通常很冗长,需要进行精简:

  1. 🔍 定位关键接口:使用浏览器 F12 开发者工具分析网络请求
  2. 📊 查找登录接口
    • 打开浏览器 F12
    • 切换到 Network 标签
    • 重新执行登录操作
    • 找到登录相关的 POST 请求
  3. 🗑️ 删除无用代码
    • 删除事务前后的无关请求
    • 保留核心的登录和查询接口
    • 移除静态资源请求

刚刚加入的事务就要派上用场了,找到刚刚录制的login事务

事务之前的就可以考虑大口大口删除了,然后再定位到具体的登录接口,那么就要用到最好用的F12啦

📍 定位登录接口

观察一下负载的内容

一遍登录后的返回都会带上一个token,这个是用来认证的

在代码中找到这个登录请求,删除前面和后面没用的代码

🗑️ 删除没用的代码

例如这段代码:

web_url(“192.168.124.19”,

"URL=http://192.168.124.19/", 

"TargetFrame=", 

"Resource=0", 

"RecContentType=text/html", 

"Referer=", 

"Snapshot=t1.inf", 

"Mode=HTML", 

EXTRARES, 

    "Url=/src/assets/images/logo.png", ENDITEM, 

LAST);
  1. web_url("192.168.124.19", …)
    • 这是 Vuser 脚本中发起一个 HTTP GET 请求的函数。
    • 第一个参数 "192.168.124.19" 是本次请求的逻辑名称(Logical Name),用来在结果报告中标识这次请求。
  2. "URL=http://192.168.124.19/"
    • 指定要请求的完整 URL。
  3. "TargetFrame="
    • 指定在 HTML 中哪个 frame 加载该请求。空字符串表示主页面(non-frame)。
  4. "Resource=0"
    • 表示这是一个非资源(Resource)请求(Resource=1 则表示静态资源,如 CSS/JS/图片)。
    • 通常把 HTML 页面本身当作 Resource=0。
  5. "RecContentType=text/html"
    • 告诉脚本预期服务器返回的 MIME 类型是 text/html,便于 LoadRunner 对响应做正确的解析。
  6. "Referer="
    • 指定 HTTP 请求头中的 Referer 字段。这里为空,表示没有来源页面。
  7. "Snapshot=t1.inf"
    • LoadRunner 在录制脚本时会生成一个快照文件(.inf),用来保存录制时抓到的请求/响应信息。
    • 运行时可以载入该快照,有助于比较和调试。
  8. "Mode=HTML"
    • 指定以 HTML 模式解析服务器返回的页面,LoadRunner 会自动扫描并下载页面中的嵌入资源(如果不禁用的话)。
  9. EXTRARES** … **ENDITEM
    • 表示在这个请求之后,额外再单独下载一些资源。
    • 本例中下载了一个 logo 图像:
  10. "Url=/src/assets/images/logo.png", ENDITEM
    • 每个资源都用一对 "<属性>=<值>"ENDITEM 来分隔。
  11. LAST
    • 标志参数列表结束,必写。

删除之后的代码就很少了,但是小花追求极致的简洁,在登录接口的位置也有可以删除的内容

web_custom_request(
    "login",                                     				 // 请求逻辑名称:login
    "URL=http://192.168.124.19/api/login",                       // 请求地址:登录接口
    "Method=POST",                                               // 请求方式:POST
    "TargetFrame=",                                              // 目标 Frame:主页面
    "Resource=0",                                                // 非静态资源请求
    "RecContentType=application/json",                           // 预期响应类型:JSON
    "Referer=http://192.168.124.19/login?redirect=/index",       // 来源页面:登录页
    "Snapshot=t3.inf",                                           // 录制快照文件
    "Mode=HTML",                                                 // 解析模式:HTML(影响资源扫描)
    "EncType=application/json",                                  // 请求体编码类型:JSON
    "Body={\"username\":\"admin\",\"password\":\"admin123\",\"code\":\"\",\"uuid\":\"91c337aee5be4936b02ef3517ba64bea\"}",  // 请求体:登录凭证和 UUID
    LAST);                                                       // 参数列表结束标志

▶️ 测试是否可以运行

🔐 获取token,添加到请求头

🎫 提取Token

现在的Web应用通常使用Token进行认证

🔍 分析响应:登录成功后,服务器返回包含Token的JSON响应。

{
  "msg": "操作成功",
  "code": 200,
  "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiMzVkYjFjZDktN2NlNC00NDNhLThjNTktNmU4ZWZiM2NmMDYzIn0.K5OaowEXxod4EHuzFc10xGv7a6TLnmd5jBpui_1UDMNI12B5bhLHSWM255n3kuJETS4OioTf5ySjUGgRyomceA"
}

📝 添加关联规则:在登录请求后添加获取token的代码(或步骤)。

🔗 应用Token:在后续请求中使用提取的Token。

✅ 测试脚本

  1. 🧪 单步调试:点击 VuGen 中的运行按钮,逐步执行脚本
  2. 📊 查看日志:检查输出日志,确认Token是否正确提取
  3. 🔧 调试修复:如果有错误,检查请求头和参数配置,如果不通过说明有一些请求头漏掉了,需要再修改。

📊 添加性能监控点

🚩 插入集合点(Rendezvous)

集合点用于同步多个虚拟用户,模拟真实的并发访问:r_rendezvous("meeting_point"); 在关键操作前添加集合点。

✅ 插入检查点(Check Points)

检查点用于验证响应结果的正确性

使用下面这段代码判断一下,注意“chaxun”需要与前面开始事务的名字一样。

	// 判断 total 字段的值是否大于 0
    if (atoi(lr_eval_string("{Total}")) > 0) {
        // 如果 total 大于 0,表示查询成功
        lr_output_message("查询成功,返回的总数为: %s", lr_eval_string("{Total}"));
        lr_end_transaction("chaxun", LR_PASS); // 设置事务为通过
    } else {
        // 如果 total 为 0 或不存在,表示查询失败
        lr_output_message("查询没有返回结果,total 值为: %s", lr_eval_string("{Total}"));
        lr_end_transaction("chaxun", LR_FAIL); // 设置事务为不通过
    }

运行一下看是不是可以运行的

什么,居然错了,检查一下是不是还有别的认证机制

再加上这个内容(观察得到Authorization就是Bearer+token)

🎯 执行性能测试

🎛️ 使用Controller执行测试

  1. 📂 打开Controller:启动LoadRunner Controller
  2. 📋 新建场景:创建新的测试场景
  3. 📁 添加脚本:选择刚才开发的脚本文件
  4. 👥 设置并发数:配置虚拟用户数量(如100个并发)
  5. ⏱️ 配置运行时间:设置测试持续时间
  6. 🚀 开始测试:点击Start按钮开始执行

📊 分析测试结果

📈 生成分析报告

  • 📋 打开Analysis:测试完成后,启动LoadRunner Analysis
  • 📁 加载结果:导入测试结果文件(.lrr格式)
  • 📊 查看图表:分析各种性能指标图表
  • 📝 生成报告:导出详细的性能测试报告

🎯 关键性能指标

  • ⏱️ 响应时间:平均响应时间、90%响应时间
  • 🔄 吞吐量:每秒处理的事务数
  • 📈 并发能力:系统能承受的最大并发用户数
  • 错误率:失败事务的百分比

💻 过程中系统的状态

💡 常见问题解答

❓ 录制时浏览器无法打开?

  • 🔧 检查防火墙设置,确保LoadRunner相关端口未被阻止
  • 🌐 确认网络连接正常,目标应用可访问
  • 🔄 重启LoadRunner和浏览器后重试

❓ 脚本运行时Token提取失败?

  • 🔍 检查左右边界是否正确设置
  • 📝 查看实际响应内容,确认Token格式
  • 🔧 调整关联规则的参数配置

❓ 并发测试时出现大量错误?

  • 📊 检查应用服务器的资源限制
  • 🔍 分析错误日志,定位具体问题
  • 📉 适当降低并发数,找到系统承受极限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小花玩的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值