VSCode本身不提供接口并发测试能力,必须依赖外部工具(如artillery)并通过tasks.json定义shell类型任务调起;F5调试器无法直接运行artillery因它非Node模块,正确做法是配置task而非launch.json,支持动态并发参数需结合${input:concurrency}与inputs声明,并显式传入环境变量,输出乱码则需调整终端缓冲与重定向至文件分析。

VSCode 本身不提供接口并发测试能力,必须靠外部工具(如 artillery、autocannon 或原生 node 脚本)驱动;配置重点不是装插件,而是让 VSCode 能可靠调起这些工具并捕获输出——否则你看到的只是“命令未找到”或空转。
为什么直接在终端跑 artillery run 成功,但 VSCode 调试器里点 F5 就报错
因为调试器默认用 node 执行 JS 文件,而 artillery 是 CLI 工具,不是 Node 模块。你不能把它塞进 launch.json 的 program 字段里——那会导致 Error: Cannot find module 'artillery' 或 spawn artillery ENOENT。
- 正确做法是:用
tasks.json定义一个终端任务,而不是调试配置 -
type必须设为shell,不是node -
command填完整命令路径,比如npx artillery run load.yml,别省略npx(避免全局安装依赖) - 如果项目没装
artillery,先npm install --save-dev artillery,否则npx找不到
tasks.json 怎么写才能支持并发参数动态替换
硬编码并发数(如 -c 100)没法快速切场景。VSCode 支持变量提示,但只对预定义变量生效;你要的是运行时输入,就得靠 args + prompt。
- 在
tasks.json的args里用${input:concurrency}占位 - 在
inputs数组里声明该输入项,类型设为promptString,带默认值 - 示例片段:
{
"version": "2.0.0",
"tasks": [
{
"label": "run-load-test",
"type": "shell",
"command": "npx artillery run -c ${input:concurrency} load.yml",
"group": "build",
"presentation": { "echo": true, "reveal": "always" },
"problemMatcher": []
}
],
"inputs": [
{
"id": "concurrency",
"type": "promptString",
"description": "并发用户数",
"default": "50"
}
]
}保存后,按 Ctrl+Shift+P → 输入 “Tasks: Run Task” → 选 run-load-test,就会弹框让你输数字。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
测试脚本里引用环境变量(如 API_BASE_URL)为何总 fallback 到本地地址
artillery 默认不读取 .env 文件,即使你装了 dotenv 也没用——它不是 Node.js 进程,不走 require() 链路。
- 必须显式用
env字段传入,且只能在artillery的 YAML 配置顶层写 - 不要在 JS 形式的配置里试图
process.env.API_BASE_URL—— 它为空 - 正确写法(
load.yml):
config:
target: '${API_BASE_URL}'
# ...
然后在 tasks.json 的 options 下加 "env": {"API_BASE_URL": "https://staging.example.com"},或者更稳妥地:在终端里 API_BASE_URL=https://staging.example.com npx artillery run load.yml。
并发测试结果乱码、JSON 输出被截断、看不到完整错误堆栈
这是 VSCode 终端缓冲区和字符编码共同导致的,尤其当 artillery 输出大量 JSON 或二进制响应体时。
- 先关掉
terminal.integrated.shellArgs里可能存在的--login参数(macOS/Linux),它会干扰 ANSI 控制序列解析 - 在
tasks.json的presentation里加"panel": "shared",避免每次新开终端覆盖历史 - 关键:把
artillery的输出重定向到文件再打开,比如npx artillery run load.yml > report.json 2>&1,然后用 VSCode 内置 JSON 查看器打开report.json
真正容易被忽略的是:并发测试不是“跑起来就行”,而是要确认目标服务是否真在承受压力——建议在 load.yml 的 phases 里加 arrivalRate 控制压测节奏,别一上来就 -c 1000,否则你看到的全是连接超时,根本分不清是网络问题还是服务崩了。

















