You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Artillery进行Socket.IO压测报错:URL必须指定

解决Artillery执行时"URL must be specified"错误

这个错误的核心原因是你误用了WebSocket专属的emit动作,但没有正确配置WebSocket连接所需的URL和初始化步骤。

问题分析

Artillery里的emit动作是WebSocket场景专属的(通常需要搭配artillery-plugin-websocket插件),而你当前的配置只指定了HTTP协议的target,没有建立WebSocket连接的相关配置,系统自然会提示需要指定WebSocket连接的URL。

解决方案分两种情况:

情况1:你的服务是WebSocket服务

如果是要测试WebSocket服务,需要做三个调整:

  1. 把target改成ws或wss开头的WebSocket地址
  2. 在场景流里先添加websocket: connect步骤建立连接
  3. 确保已安装WebSocket插件(如果没装,先执行npm install -g artillery-plugin-websocket)

修改后的完整配置:

config:
  target: "ws://192.168.2.161:5000"
  plugins:
    websocket: {}  # 启用WebSocket插件
  phases:
    - duration: 600
      arrivalRate: 5
scenarios:
  - name: "oz_event"
    flow:
      # 先建立WebSocket连接,若服务需要命名空间可在此指定
      - websocket:
          action: "connect"
          namespace: "oz"
      - loop:
          - emit:
              channel: "oz_event"
              data: "hello world!"
          - think: 1
        count: 50
      # 测试结束后关闭连接
      - websocket:
          action: "close"

情况2:你的服务是HTTP服务

如果是要测试HTTP接口,那emit动作就用错了,应该换成HTTP请求动作(比如post/get),示例如下:

config:
  target: "http://192.168.2.161:5000"
  phases:
    - duration: 600
      arrivalRate: 5
scenarios:
  - name: "oz_event"
    flow:
      - loop:
          - post:
              url: "/oz/oz_event"  # 替换成你的实际HTTP接口路径
              body: "hello world!"
              headers:
                Content-Type: "text/plain"  # 根据接口要求设置Content-Type
          - think: 1
        count: 50

关键注意点

  • 如果你用WebSocket方案,命名空间namespace可以在connect步骤指定,不需要在emit里重复写
  • 确保你的服务端确实支持WebSocket连接,否则会出现连接失败的错误

内容的提问来源于stack exchange,提问作者Arifur Rahim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:13:32