测试动态 / 测试知识 / 使用LoadRunner进行RESTful API接口压力测试全流程
使用LoadRunner进行RESTful API接口压力测试全流程
2026-07-23 作者:cwb 浏览次数:24

使用LoadRunner对RESTful API进行压力测试需要按照从脚本开发、场景设计、执行监控到结果分析的全流程。


一、测试准备和需求分析

确定测试目标:确定要压测的API接口、预期并发数、吞吐量目的(TPS)、响应时间上限(如95%请求在500ms内)。

接口文档研读:获取API的URL、请求方法(GET/POST/PUT/DELETE)、请求头(如Content-Type: application/json、Authorization: Bearer <token>)、请求体结构、响应数据结构及状态码。

环境准备:确定测试环境和生产环境避免测试造成事故。在Controller所在机器部署LoadRunner,保证能访问被测API服务器。如果需监控服务器资源,提前配置好监控账号和防火墙规则。

二、VuGen脚本开发

打开Virtual User Generator(VuGen),选择 Web的HTTP/HTML协议(RESTful API根据HTTP,完全适用)。可录制、手动编写或导入API定义(如Postman集合、Swagger)生成骨架脚本。


1. 脚本结构以POST请求创建用户为例


c

Action()

{

    /* 设置思考时间(可选,模拟真实用户延迟) */

    lr_think_time(2);


    /* 关联:如果需先从响应中提取token等数据,使用web_reg_save_param */

    web_reg_save_param("authToken",

        "LB=\"token\":\"",

        "RB=\"",

        "Ord=1",

        "Search=Body",

        LAST);


    /* 登录请求获取token(如果需要) */

    web_custom_request("Login",

        "URL=https://api.zmtests.com/login",

        "Method=POST",

        "Resource=0",

        "EncType=application/json",

        "Body={\"username\":\"testuser\",\"password\":\"testpass\"}",

        LAST);


    /* 事务开始,用于测量重要业务 */

    lr_start_transaction("CreateUser");


    /* 检查点,证实业务成功 */

    web_reg_find("Text=201 Created",

        "Search=Headers",

        "SaveCount=create_success",

        LAST);


    /* 添加JSON请求头 */

    web_add_header("Content-Type", "application/json");

    web_add_header("Authorization", lr_eval_string("Bearer {authToken}"));


    /* 发送RESTful POST请求,使用参数化数据 */

    web_custom_request("CreateUser",

        "URL=https://api.example.com/users",

        "Method=POST",

        "Resource=0",

        "EncType=application/json",

        "Body={\"name\":\"{p_name}\",\"email\":\"{p_email}\",\"role\":\"user\"}",

        LAST);


    /* 检查事务结果 */

    if (atoi(lr_eval_string("{create_success}")) > 0) {

        lr_end_transaction("CreateUser", LR_PASS);

    } else {

        lr_end_transaction("CreateUser", LR_FAIL);

    }


    return 0;

}


2. 详解

请求发送:使用web_custom_request函数,需指定Method(如GET、POST、PUT等)、EncType为application/json,并将JSON格式的请求体放入Body参数。GET请求可省略Body。

参数化:将可变数据(用户名、邮箱等)替换为参数{p_name}、{p_email}。创建参数文件(如users.dat)并在VuGen中配置:打开参数列表(Ctrl+L),新建参数,选择File类型,浏览文件并设置列分隔符、取值方式(Sequential/Random/Unique)、更新频率(Each iteration/Each occurrence/Once)。

关联(动态数据处理):如果API需要会话Token、CSRF Token或从响应中提取ID用于后续请求,使用web_reg_save_param在请求前注册边界。上例中提取登录返回的token,存入参数authToken,后续通过lr_eval_string("{authToken}")引用。

检查点(业务测试):不能仅依赖HTTP状态码,需证实响应内容。web_reg_find可搜索响应头或主体中的特定文本,并记录出现次数。根据SaveCount判断事务成败,保证测试结果反映真实业务成功率。

事务和思考时间:用lr_start_transaction和lr_end_transaction包裹重要请求,得到准确的单次API调用耗时。思考时间(lr_think_time)可模拟客户端延迟,在压力测试中一般设小或移除(场景里可统一设置忽略思考时间来直接加压)。

JSON复杂请求处理:如果请求体很长或需要动态构造,可在脚本中用C语言拼接字符串,或使用lr_save_string创建JSON。注意转义双引号。


三、脚本调试和单用户测试

在VuGen中回放脚本,查看回放日志(Replay Log)和运行结果:

确定HTTP返回码是不是符合预期。

证实检查点是不是成功,事务状态是不是通过。

参数取值是不是正确,关联参数是不是提取到值。

如果失败,分析服务器返回的错误信息,调整请求头、参数或边界。


可通过Runtime Settings调整运行思路:

Run Logic:设置Action迭代次数,模拟单个用户多次调用。

Think Time:设置为“Ignore think time”以便快速证实,或“Replay think time”模拟真实间隔。

Log:调试时开启扩展日志(Extended log)以查看请求和响应详细数据,确定无误后改为标准日志,避免磁盘I/O影响压测。


四、Controller场景设计

脚本调试通过后,进入Controller(控制台)创建测试场景。


导入脚本:新建场景,选择刚才的脚本,设置脚本途径和运行时设置。

负载生成器(Load Generators):添加用于产生负载的机器(可为本机或多台远程机器)。在“Generators”中添加主机名/IP,并进行连接测试。

虚拟用户分配:按百分比或绝对数量将Vuser分配到不同Load Generator上。如果单个Generator内存/CPU不足,需分散负载。


场景方式:

手动场景:可精细控制Vuser的启动、不断和停止方式。

面向目的场景:设定目的(如每秒事务数达到1000),由LoadRunner自动调整Vuser数量。


调度设置(Schedule):

Ramp Up:启动方式(如每15秒启动5个Vuser),避免瞬间冲击。

Duration:不断运行时间(如30分钟),模拟稳定的压力状态。

Ramp Down:逐步停止,避免突然结束导致监控数据缺失。


运行时设置:

可包括VuGen中的日志级别(建议错误日志)、思考时间(一般选择“Ignore”或“Limit”)。

设置网络速度模拟(如WAN/LAN,如果测试API一般不限速)。

添加集合点(Rendezvous)以制造并发尖峰:在脚本中需要并发的位置插入lr_rendezvous,在Controller中启用方法(如等待所有Vuser到齐后释放)。


监控配置:

Windows/Linux服务器资源:添加被测服务器的CPU、内存、磁盘IO、网络等计数器。需有管理员权限或SNMP配置。

应用服务器/数据库:如有条件,通过LoadRunner自带的监控插件或自定义监控器采集队列长度、连接数等标准。

场景运行状态:默认记录每秒事务数、响应时间、吞吐量等。


五、执行测试和实时观察

启动场景后,在Controller的Run视图实时监控:

Vuser状态:查看是不是有失败、错误。

事务图表:观察平均响应时间曲线是不是随负载增大而平滑上升,有无剧烈波动。

吞吐量和点击率:API测试中,吞吐量(字节/秒)和每秒请求数应和虚拟用户数趋势一致。

服务器资源:如果CPU使用率不断超过90%或内存不断增长,可能成为短板。

错误统计:重视Errors per Second,及时分析错误码(如5xx服务端错误、4xx客户端错误、超时错误)。出现大面积失败时应停止测试,排查原因。


建议先进行负载测试(逐步增加Vuser直到达到目的并发,观察是不是满足标准),再视情况执行压力测试(不断增加负载直到系统崩溃,寻找极限点)或稳定性测试(长时间运行目的并发,检测内存泄漏等)。


六、报告结果分析


场景结束后,打开Analysis(分析器),LoadRunner会自动生成汇总报告。分析标准:

事务摘要:查看各事务的通过/失败数、最小/平均/最大/90%响应时间、标准差。重点重视平均响应时间和90%分位数(更好地反映大多数用户体验)。如果某事务失败率高,点击错误详情向下钻取。

每秒事务数(TPS)和响应时间关联图:将两者放在同一图表,观察负载上升时响应时间的拐点。拐点之前的吞吐量为最大有效吞吐量。

Web资源细分:如Web Page Diagnostics分解DNS分析、连接建立、首字节时间和接收时间。对于API,一般重视Time to First Buffer(服务器处理时间)和接收时间。

服务器资源和性能对比:把CPU、内存、磁盘队列和事务响应时间、吞吐量叠加分析。如发现响应时间突增时CPU已达100%,表示计算资源是短板;如果CPU低但响应时间长,可能数据库或外部服务慢。

合并报告和自动生成:可自定义图表、添加注释,使用“Export to HTML/Word”生成正式测试报告,附上结果和优化建议。


常见RESTful API性能短板:

服务端线程池不足导致排队。

数据库慢查询、缺少索引。

中间件(如Nginx、网关)连接数限制。

负载均衡方法不均。

客户端等待超时设置不当。


七、注意事项

JSON特殊字符:如果请求体含有双引号、反斜杠,需用\"或\\转义。建议将整个Body放入外部文件,使用lr_read_file动态读取,避免转义错误。

数据唯一性:如果业务要求参数唯一(如用户名),参数文件应足够大,且取值方式设为Unique,并设置“Continue in a cyclic manner”或“Abort Vuser”方法。

清理数据:测试可能产生大量垃圾数据,可事先准备删除脚本或使用独立测试数据库并在事后还原。

避免本地短板:Load Generator自身可能先达到短板(CPU、端口数),可在Windows上修改注册表增加临时端口范围(MaxUserPort)和缩短TIME_WAIT时间。监控Generator资源,必要时增加机器。

加密和认证:如果API使用OAuth2/JWT,需在脚本中实现获取Token的思路,并处理Token过期刷新(如通过if语句检查错误码后重新获取)。

版本控制:将脚本、场景文件纳入版本管理,便于复现和迭代。


通过以上流程可以系统化地使用LoadRunner完成RESTful API的压力测试,输出准确的容量测试报告,为系统优化提供数据支撑。


文章标签: 软件测试 测试工具
热门标签 换一换
第三方软件国产化测试 第三方信创测试 CNAS软件测评报告 CMA软件测评报告 首版次软件认定 软件结题验收 软件测试报告书 软件质量检测 数据库测试 H5应用测试 软件质检机构 第三方质检机构 第三方权威质检机构 信创测评机构 信息技术应用创新测评机构 信创测试 软件信创测试 软件系统第三方测试 软件系统测试 软件测试标准 工业软件测试 软件应用性能测试 应用性能测试 可用性测试 软件可用性测试 软件可靠性测试 可靠性测试 系统应用测试 软件系统应用测试 软件应用测试 软件负载测试 API自动化测试 软件结题测试 软件结题测试报告 软件登记测试 软件登记测试报告 软件测试中心 第三方软件测试中心 应用测试 第三方应用测试 软件测试需求 软件检测报告定制 软件测试外包公司 第三方软件检测报告厂家 CMA资质 软件产品登记测试 软件产品登记 软件登记 CNAS资质 cma检测范围 cma检测报告 软件评审 软件项目评审 软件项目测试报告书 软件项目验收 软件质量测试报告书 软件项目验收测试 软件验收测试 软件测试机构 软件检验 软件检验检测 WEB应用测试 API接口测试 接口性能测试 第三方系统测试 第三方网站系统测试 数据库系统检测 第三方数据库检测 第三方数据库系统检测 第三方软件评估 课题认证 第三方课题认证 小程序测试 app测试 区块链业务逻辑 智能合约代码安全 区块链 区块链智能合约 软件数据库测试 第三方数据库测试 第三方软件数据库测试 软件第三方测试 软件第三方测试方案 软件测试报告内容 网站测试报告 网站测试总结报告 信息系统测试报告 信息系统评估报告 信息系统测评 语言模型安全 语言模型测试 软件报告书 软件测评报告书 第三方软件测评报告 检测报告厂家 软件检测报告厂家 第三方网站检测 第三方网站测评 第三方网站测试 检测报告 软件检测流程 软件检测报告 第三方软件检测 第三方软件检测机构 第三方检测机构 软件产品确认测试 软件功能性测试 功能性测试 软件崩溃 稳定性测试 API测试 API安全测试 网站测试测评 敏感数据泄露测试 敏感数据泄露 敏感数据泄露测试防护 课题软件交付 科研经费申请 软件网站系统竞赛 竞赛CMA资质补办通道 中学生软件网站系统CMA资质 大学生软件网站系统CMA资质 科研软件课题cma检测报告 科研软件课题cma检测 国家级科研软件CMA检测 科研软件课题 国家级科研软件 web测评 网站测试 网站测评 第三方软件验收公司 第三方软件验收 软件测试选题 软件测试课题是什么 软件测试课题研究报告 软件科研项目测评报告 软件科研项目测评内容 软件科研项目测评 长沙第三方软件测评中心 长沙第三方软件测评公司 长沙第三方软件测评机构 软件科研结项强制清单 软件课题验收 软件申报课题 数据脱敏 数据脱敏传输规范 远程测试实操指南 远程测试 易用性专业测试 软件易用性 政府企业软件采购验收 OA系统CMA软件测评 ERP系统CMA软件测评 CMA检测报告的法律价值 代码原创性 软件著作登记 软件著作权登记 教育APP备案 教育APP 信息化软件项目测评 信息化软件项目 校园软件项目验收标准 智慧软件项目 智慧校园软件项目 CSRF漏洞自动化测试 漏洞自动化测试 CSRF漏洞 反序列化漏洞测试 反序列化漏洞原理 反序列化漏洞 命令执行 命令注入 漏洞检测 文件上传漏洞 身份验证 出具CMA测试报告 cma资质认证 软件验收流程 软件招标文件 软件开发招标 卓码软件测评 WEB安全测试 漏洞挖掘 身份验证漏洞 测评网站并发压力 测评门户网站 Web软件测评 XSS跨站脚本 XSS跨站 C/S软件测评 B/S软件测评 渗透测试 网站安全 网络安全 WEB安全 并发压力测试 常见系统验收单 CRM系统验收 ERP系统验收 OA系统验收 软件项目招投 软件项目 软件投标 软件招标 软件验收 App兼容性测试 CNAS软件检测 CNAS软件检测资质 软件检测 软件检测排名 软件检测机构排名 Web安全测试 Web安全 Web兼容性测试 兼容性测试 web测试 黑盒测试 白盒测试 负载测试 软件易用性测试 软件测试用例 软件性能测试 科技项目验收测试 首版次软件 软件鉴定测试 软件渗透测试 软件安全测试 第三方软件测试报告 软件第三方测试报告 第三方软件测评机构 湖南软件测评公司 软件测评中心 软件第三方测试机构 软件安全测试报告 第三方软件测试公司 第三方软件测试机构 CMA软件测试 CNAS软件测试 第三方软件测试 移动app测试 软件确认测试 软件测评 第三方软件测评 软件测试公司 软件测试报告 跨浏览器测试 软件更新 行业资讯 软件测评机构 大数据测试 测试环境 网站优化 功能测试 APP测试 软件兼容测试 安全测评 第三方测试 测试工具 软件测试 验收测试 系统测试 测试外包 压力测试 测试平台 bug管理 性能测试 测试报告 测试框架 CNAS认可 CMA认证 自动化测试
专业测试,找专业团队,请联系我们!
咨询软件测试 400-607-0568