如何在Artillery中使用SocketIO引擎仅接收事件不发送事件?
Artillery SocketIO 被动监听服务器推送事件的实现方法
Artillery的SocketIO引擎支持被动监听服务器推送的事件,无需主动发送任何事件,你之前的配置因结构错误导致失效,以下是正确的实现方式:
完整配置示例
config: target: "http://你的SocketIO服务器地址" phases: - duration: 60 # 测试持续时间(秒) arrivalRate: 1 # 每秒创建的虚拟用户数 engine: "socketio" # 可选:指定SocketIO传输方式,默认会尝试多种,可固定为websocket socketio: transports: ["websocket"] scenarios: - name: "仅监听服务器推送事件" flow: # 第一步:建立SocketIO连接 - connect: {} # 监听服务器推送的指定事件 - on: event: "data" # 替换为你要监听的事件名 # 可选:捕获事件中的数据到变量,用于后续验证或日志 capture: - json: "$.from" as: "sender" - json: "$.origin" as: "message_origin" # 可选:断言验证事件数据是否符合预期 assert: - equals: - "{{ sender }}" - "ai" - equals: - "{{ message_origin }}" - "{{ messageId }}" # 若使用变量需提前在config中定义或通过其他方式注入 # 保持连接,持续监听事件(单位:秒) - think: 300
关键说明
- 必须遵循Artillery的标准配置结构:所有逻辑需放在
scenarios.flow下,顶层不能直接写监听指令 - 使用
on指令是SocketIO引擎中监听入站事件的官方正确方式,而非你尝试的waitFor connect指令负责建立SocketIO连接,这是监听事件的前提think指令用于让虚拟用户保持连接状态,避免连接建立后立即断开,确保能持续接收服务器推送的事件- 若不需要捕获或验证数据,可去掉
capture和assert部分,仅保留event字段即可
内容的提问来源于stack exchange,提问作者장현수
相关产品推荐
相关产品推荐

