测试动态 / 测试知识 / LoadRunner WebSocket协议脚本开发与实时通信压测
LoadRunner WebSocket协议脚本开发与实时通信压测
2026-07-27 作者:cwb 浏览次数:8

LoadRunner WebSocket 脚本开发和实时通信压测指南。


1. 协议选择和脚本基础

选择正确的协议

创建 Vuser 脚本时,直接选择WebSocket单协议,或多协议组合(如 WebSocket + Web - HTTP/HTML,用于同时处理HTTP登录和WebSocket通信)。不要仅选Web - HTTP/HTML,无法直接生成长连接消息函数。


主要函数概览

web_websocket_connect – 建立 WebSocket 连接(含 HTTP 升级)

web_websocket_send – 发送文本/二进制消息

web_websocket_receive – 同步接收一条消息

web_reg_websocket_receive – 异步注册期望消息(类似 web_reg_find)

web_websocket_close – 主动关闭连接


2. 脚本开发流程


连接建立(放在 vuser_init 或 Action 开头)

c

web_set_sockets_option("SSL_VERSION", "TLSv1.2");

web_set_sockets_option("WS_KEEP_ALIVE_INTERVAL", "30");


web_websocket_connect(

    "WSConnect",

    "URL=wss://your.server.com/chat",

    "Origin=https://your.server.com",

    "Headers=Authorization: Bearer {token}\r\n",

    "SocketID=0",

    "Timeout=10",

    LAST);


如果需先通过 HTTP 登录获取 token,在脚本前部用 web_submit_data 等 HTTP 函数,再用参数 {token} 传递。SocketID 用于区分同一 Vuser 内的多个 WebSocket 连接(一般设为 0)。

消息收发和关联

同步发送加接收响应:


c

lr_start_transaction("WS_SendAndReceive");


web_websocket_send(

    "WSConnect",

    "Payload={\"type\":\"ping\",\"seq\":{seq}}",

    "PayloadType=Text",

    LAST);


web_websocket_receive(

    "WSConnect",

    "Text=pong",

    "SaveStringParam=pongResp",

    "Timeout=5",

    LAST);


lr_end_transaction("WS_SendAndReceive", LR_AUTO);


异步推送处理(服务器主动推送):


c

// 在发送前或 vuser_init 末尾注册

web_reg_websocket_receive(

    "WSConnect",

    "Text=*notification*",

    "SaveStringParam=notifyMsg",

    "MaxMatch=10",

    "Timeout=0",

    LAST);


// 后续循环中检查

if (strlen(lr_eval_string("{notifyMsg}")) > 0) {

    lr_log_message("Received push: %s", lr_eval_string("{notifyMsg}"));

}


web_reg_websocket_receive 注册后,所有一致的后台消息会被自动捕获到参数中,实现非阻塞异步处理。


心跳保活

实时通信必须维持长连接。常见做法是在 Action 循环中加入应用层心跳:


c

if (mod(current_sec, 30) == 0) {

    web_websocket_send("WSConnect", "Payload=ping", LAST);

}


TCP Keep-Alive 也可辅助使用(已在连接设置中配置)。


连接关闭(vuser_end)

c

web_websocket_close("WSConnect", "Code=1000", "Reason=Normal Closure", LAST);


3. 参数化和动态数据关联

参数化负载内容

将发送内容、频率、目的用户等放入参数文件,使用 {username}、{message}、{roomId} 等。序列号或时间戳可用 {timestamp} 或 lr_param_increment。


动态 Token 关联

如果 WebSocket 握手阶段返回 SessionId(在 HTTP 101 响应或首条消息中),用 HTTP 级别的关联捕获:


c

web_reg_save_param("WS_TOKEN", "LB=token\":\"", "RB=\"", "Search=Body", LAST);

web_websocket_connect(...);

// 后续发送时使用 {WS_TOKEN}


响应内容提取

同步接收时直接用 web_websocket_receive 的 SaveStringParam,或用 Text 做边界捕获:


c

web_websocket_receive("WSConnect",

    "Text={\"seq\":", "SaveStringParam=fullMsg",

    "Binary=0",  // 文本方式

    LAST);


4. 实时通信压测设计重点

长连接 Vuser 结构

vuser_init:建立 WebSocket 连接,完成登录鉴权。

Action:循环执行发送消息 - 接收确定,同时处理异步通知。通过 think_time 模拟用户延迟(压测峰值时可移除)。

vuser_end:主动关闭连接。


并发方式和负载模型

连接数:每个 Vuser 默认占用一个 WebSocket 连接,Vuser 数即在线用户数。

突发流量:使用集合点(lr_rendezvous)让所有 Vuser 同时发送,测试瞬时处理能力。

阶梯加压:在 Controller 中逐步增加 Vuser,观察短板。

长时间稳定性:设置 Duration 为 2–8 小时,监控连接掉线率。


监控标准

客户端事务响应时间(发送到收到回复的往返时间)

服务端 WebSocket 连接数、内存、CPU、线程池使用率

消息吞吐量(条/秒)、错误率(连接超时、4xx/5xx 升级失败、消息丢失)

LoadRunner 内置监控可添加系统资源,应用标准需通过自定义计数器或日志补充。


5. 常见问题和调试


问题:无法建立 WSS 连接

排查和解决:检查 SSL 版本,安装服务器证书到 LoadRunner 证书库,或临时设置 web_set_sockets_option("SSL_VERIFY_PEER", "0") 跳过检查(仅限测试环境)。


问题:连接被服务端主动断开

排查和解决:查看是不是缺少心跳,增加 TCP Keep-Alive 或应用层 Ping;检查服务端最大空闲时间配置。


问题:异步消息丢失或乱序

排查和解决:使用 web_reg_websocket_receive 并设置合适的缓冲区大小和一致规则;及时从参数中取出消息,避免包括。


问题:录制不生成 WebSocket 函数

排查和解决:在 Recording Options → Network → Port Mapping 中设置 Socket level data,并启用 WebSocket 支持;也可通过 Wireshark 抓包后手动编码。


问题:高并发下绑定端口耗尽

排查和解决:多 Vuser 运行时本地端口可能不足,调大动态端口范围(如 Linux 下修改 net.ipv4.ip_local_port_range)并缩短 TIME_WAIT 时间。


6. 完整脚本示例

c

vuser_init() {

    web_set_sockets_option("SSL_VERSION", "TLSv1.2");

    // HTTP 登录获取 token 部分略

    web_websocket_connect("WS0", "URL=wss://...", "SocketID=0", LAST);

    web_reg_websocket_receive("WS0", "Text=*chat*", "SaveStringParam=pushMsg", "MaxMatch=5", "Timeout=0", LAST);

    return 0;

}


Action() {

    lr_start_transaction("SendMessage");

    web_websocket_send("WS0", "Payload={\"msg\":\"{userMsg}\"}", "PayloadType=Text", LAST);

    web_websocket_receive("WS0", "Text=ack", "Timeout=3", LAST);

    lr_end_transaction("SendMessage", LR_AUTO);


    if (strlen(lr_eval_string("{pushMsg}")) > 0) {

        // 处理异步推送

    }

    return 0;

}


vuser_end() {

    web_websocket_close("WS0", "Code=1000", LAST);

    return 0;

}


包括了连接、同步收发、异步注册和正常关闭,可以直接在此基础上根据实际业务协议调整Payload和关联思路。


文章标签: 软件测试 测试工具
热门标签 换一换
第三方软件国产化测试 第三方信创测试 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