云压测 WebSocket 协议压测

这篇说说基于 WebSocket 协议的压测脚本编写方法,说明其与 HTTP 脚本的区别在于 WebSocket 连接建立后主函数被阻塞,通过回调函数处理异步事件,并给出 ws.connect 等接口的基本用法和代码示例。 脚本结构:WebSocket 脚本的 VU 不持续迭代主函数,而是通过回调函数处理异步事件。 核心接口:使用 ws.connect 建立连接,通过 ws.Socket 对象的 send、on、cl。

相关产品
云压测 产品页,含版本规格、价格与购买入口。

本介绍基于 WebSocket 协议的压测脚本的编写方法。

注意:说明:

注意:详细的 API 文档请参见 PTS API。

一、概述

·WebSocket 是一种应用层通信协议,可在单个 TCP 连接上进行全双工通信。

·不同于 HTTP 请求的客户端发起、服务端响应的一问一答模式,WebSocket 连接一旦建立,直到连接关闭之前,客户端、服务器之间都可源源不断地、双向地交换数据。因此,在压测场景中,基于 WebSocket 请求的脚本与基于 HTTP 请求的脚本,其结构和作用机制有所不同:

·执行 HTTP 脚本的每个 VU 会持续不断地迭代主函数(export default function() { … }),直到压测结束。

·执行 WebSocket 脚本的每个 VU 不会持续迭代主函数,因为主函数会被建立连接的 ws.connect 方法阻塞,直到连接关闭。而在连接建立后的回调函数里(function (socket) {…}),会持续不断地监听和处理异步事件,直到压测结束。

二、脚本编写

PTS API 的 ws 模块提供了 WebSocket 协议的相关接口,请参见 pts/ws API。

基本用法

·用 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)执行时,会获取参数文件里的每行数据,作为测试数据的值,供脚本里的变量引用。具体使用方法请参见 使用参数文件。

·请求文件:构建你的请求所需的文件,如需要上传的文件。具体使用方法请参见 使用请求文件。

·协议文件:请求序列化所需要用到的文件。具体使用方法请参见 使用协议文件。

赞 (0)
上一篇 4天前
下一篇 4天前