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

Artillery.io无法识别命令行传入变量问题求助

Artillery.io在PowerShell中无法正确传递命令行变量的原因及解决办法

问题场景

你在PowerShell中执行Artillery负载测试命令时,传入的duration等变量未被正确识别,日志显示Phase started: unnamed (index: 0, duration: undefineds),但硬编码duration为具体值时脚本运行正常。执行命令如下:

artillery run --variables '{ \"duration\": 1, \"data\": \"pgqrdbtymracjrkgzwtdvjaxzgvsvzcdilemxswwbewfbxq\", \"count\": 1 }' --output C:\Users\patryk\socket_io\server\tests\test-run-report.json C:\Users\patryk\socket_io\server\tests\load-test.yml

测试脚本load-test.yml内容:

config:
  target: "http://localhost:3000/"
  phases:
    - duration: "{{ duration }}"
      arrivalRate: 1
 
scenarios:
  - name: "Emit an event"
    engine: socketio
    flow:
      - loop:
          - emit:
              channel: "chat
               message"
              data: "{{ data }}"
          - think: 1
        count: "{{ count }}" 

原因分析

问题出在PowerShell对JSON字符串的转义规则与其他Shell(如Bash)不同:
你使用了类Bash的\"来转义双引号,但PowerShell并不识别这种转义方式,导致Artillery收到的JSON格式无效,无法解析出变量。

解决办法

有两种正确的方式在PowerShell中传递JSON格式的变量:

1. 使用单引号包裹JSON对象(推荐)

PowerShell中,单引号包裹的字符串不会被解析转义,直接用单引号包住整个JSON即可:

artillery run --variables '{"duration": 1, "data": "pgqrdbtymracjrkgzwtdvjaxzgvsvzcdilemxswwbewfbxq", "count": 1}' --output C:\Users\patryk\socket_io\server\tests\test-run-report.json C:\Users\patryk\socket_io\server\tests\load-test.yml

2. 用双引号转义双引号

如果必须使用双引号包裹JSON,PowerShell要求用两个连续双引号来转义内部的双引号:

artillery run --variables "{ ""duration"": 1, ""data"": ""pgqrdbtymracjrkgzwtdvjaxzgvsvzcdilemxswwbewfbxq"", ""count"": 1 }" --output C:\Users\patryk\socket_io\server\tests\test-run-report.json C:\Users\patryk\socket_io\server\tests\load-test.yml

额外检查

另外注意脚本中emit的channel字段存在换行,可能导致Socket.IO事件名称异常,建议调整为:

channel: "chat message"

或者使用转义换行符:

channel: "chat\nmessage"

内容的提问来源于stack exchange,提问作者The Trainer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:49:53