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
相关产品推荐
相关产品推荐

