tencent cloud

云压测

产品概述
购买指南
计费概述
按量计费(后付费)
购买方式
欠费说明
退费说明
快速入门
操作指南
简单模式压测
脚本模式压测
JMeter 模式压测
管理项目
管理场景
流量录制
环境管理
定时压测
压测报告
访问控制
告警管理
标签管理
错误代码手册
实践教程
使用 Prometheus 观测性能压测指标
使用云压测回放 GoReplay 录制的请求
API 文档
History
Introduction
API Category
Making API Requests
PTS-related APIs
Data Types
Error Codes
JavaScript API 列表
JavaScript API 列表概述
pts/global
pts/http
pts
pts/dataset
pts/grpc
pts/jsonpath
pts/protobuf
pts/redis
pts/sql
pts/url
pts/util
pts/ws
pts/socketio
pts/socket
常见问题
相关协议
服务等级协议
使用限制
隐私政策
数据处理和安全协议

WebSocket 协议压测

PDF
聚焦模式
字号
最后更新时间: 2025-03-10 16:46:55
本介绍基于 WebSocket 协议的压测脚本的编写方法。
说明:
详细的 API 文档请参见 pts/ws

概述

WebSocket 是一种应用层通信协议,可在单个 TCP 连接上进行全双工通信。
不同于 HTTP 请求的客户端发起、服务端响应的一问一答模式,WebSocket 连接一旦建立,直到连接关闭之前,客户端、服务器之间都可源源不断地、双向地交换数据。因此,在压测场景中,基于 WebSocket 请求的脚本与基于 HTTP 请求的脚本,其结构和作用机制有所不同:
执行 HTTP 脚本的每个 VU 会持续不断地迭代主函数(export default function() { ... }),直到压测结束。
执行 WebSocket 脚本的每个 VU 不会持续迭代主函数,因为主函数会被建立连接的 ws.connect 方法阻塞,直到连接关闭。而在连接建立后的回调函数里(function (socket) {...}),会持续不断地监听和处理异步事件,直到压测结束。

脚本编写

PTS API 的 ws 模块提供了 WebSocket 协议的相关接口,请参见 pts/ws
基本用法
ws.connect 方法建立连接,并在其回调函数里定义您的业务逻辑:
ws.connect 的必传参数为 URL 和回调函数。
若连接建立成功,PTS 会将创建好的 ws.Socket 对象传入回调函数。您可在回调函数里,定义您的 WebSocket 请求逻辑。
执行完回调函数,ws.connect 会返回 ws.Response 对象。
ws.Socket 对象的常用方法:
send:发送文本消息。
close:关闭连接。
on:监听事件,并用回调函数处理事件。当前 PTS 支持的事件列表如下:
事件名
事件用途
open
建立连接
close
关闭连接
error
发生错误
message
接收文本消息
binaryMessage
接收二进制消息
pong
接收 pong 消息
ping
接收 ping 消息
代码示例如下:
import ws from 'pts/ws';
import { check, sleep } from 'pts';
export default function () {
const res = ws.connect("ws://localhost:8080/echo", function (socket) {
socket.on('open', () => console.log('connected'));
socket.on('message', (data) => console.log('Message received: ', data));
socket.on('close', () => console.log('disconnected'));
socket.send("message");
socket.setTimeout(function () {
console.log('3 seconds passed, closing the socket');
socket.close();
}, 3000);
socket.setInterval(function () {
socket.ping();
}, 500);
socket.setLoop(function () {
sleep(0.1)
socket.send("loop message")
});
});
check("status is 101", () => res.status === 101);
}

文件依赖

在压测场景里,您可上传以下几种类型的文件,提供压测执行时的状态数据:
参数文件:以 csv 文件的形式,动态提供测试数据。也即,场景被每个并发用户(VU)执行时,会获取参数文件里的每行数据,作为测试数据的值,供脚本里的变量引用。具体使用方法请参见 使用参数文件
请求文件:构建您的请求所需的文件,如需要上传的文件。具体使用方法请参见 使用请求文件
协议文件:请求序列化所需要用到的文件。具体使用方法请参见 使用协议文件

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈