n8n 如何用 n8n-benchmark 压测工具对运行中的实例执行并发请求基准测试
2026/9/9 22:42:39 网站建设 项目流程

n8n 如何用 n8n-benchmark 压测工具对运行中的实例执行并发请求基准测试

【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n

n8n 仓库内置了一个名为n8n-benchmark的压测 CLI 工具(包名@n8n/n8n-benchmark),用于对一个已经在运行中的 n8n 实例执行基准测试:它会先通过 API 确认实例在线、按需初始化 owner 账号,再把场景(scenario)附带的工作流、凭证等测试数据导入实例,最后用 k6 以指定并发数发起持续一段时间的真实请求,并输出结果摘要。

本文以「对运行中的实例执行并发请求基准测试」为目标,给出可直接执行的命令、关键参数和结果查看方式。适用前提:

  • 目标 n8n 实例已启动,且可以通过 HTTP 访问(本地http://localhost:5678或任意公网/内网 URL);
  • 你拥有该实例 owner(首个注册用户)的邮箱和密码,工具用它登录并导入测试数据;
  • 使用 Docker 方式运行压测器(推荐路径,下文默认);无 Docker 的替代路径见后文。

用 Docker 镜像对运行中的实例执行压测

官方提供的最简单方式是直接拉取 benchmark 镜像,一条docker run命令即可。命令中的--n8nBaseUrl--n8nUserEmail--n8nUserPassword三个值需要你替换为实例的真实地址与真实 owner 账号(下面沿用 README 中的占位写法,执行前必须替换):

docker pull ghcr.io/n8n-io/n8n-benchmark:latest # 打印 run 子命令的帮助,列出全部可用参数 docker run ghcr.io/n8n-io/n8n-benchmark:latest run --help # 以 5 个并发请求对 single-webhook 场景压测 1 分钟 docker run ghcr.io/n8n-io/n8n-benchmark:latest run \ --n8nBaseUrl=https://instance.url \ --n8nUserEmail=InstanceOwner@email.com \ --n8nUserPassword=InstanceOwnerPassword \ --vus=5 \ --duration=1m \ --scenarioFilter=single-webhook

两个执行参数决定压测的强度:

  • --vus:并发请求数(源码中的描述是 "Number of concurrent requests to make"),默认5
  • --duration:压测持续时间,必须带单位,例如1m30s,默认1m

--scenarioFilter按名称筛选只跑某一个场景;不传该参数时会运行--testScenariosPath指向目录下的全部场景。

注意一个副作用:运行某个场景前,工具会先把该场景声明的测试数据(工作流 JSON、凭证文件等)通过 API 导入你的实例,并等待约 1 秒让工作流激活(源码注释说明在 multi-main 模式下激活可能更慢)。也就是说,压测会在你运行中的实例里留下测试工作流,选择场景和实例时要把这点考虑进去。

先列出可用场景,再选择压测对象

镜像内置的场景放在仓库的 scenarios 目录(即 packages/@n8n/benchmark/README.md 中链接的./scenarios)。每个场景由三部分组成:

  • 一个 manifest 文件(*.manifest.json),描述场景名、说明、要导入的测试数据;
  • 要导入实例的测试数据,如工作流文件workflowFiles、凭证credentialFiles、数据表dataTableFile
  • 一个 k6 脚本,实际执行请求步骤。脚本在运行时从环境变量API_BASE_URL拿到实例地址。

字段定义见 scenario.schema.json。

list子命令可以在不压测的情况下查看镜像内置的全部场景及其说明:

docker run ghcr.io/n8n-io/n8n-benchmark:latest list

当前仓库内置的场景包括:binary-datacredential-http-nodedata-table-nodehttp-nodejs-code-nodemultiple-webhookspy-code-nodeset-node-expressionssingle-webhook

single-webhook场景为例,它的 k6 脚本(见 single-webhook.script.js)每轮请求执行GET ${API_BASE_URL}/webhook/single-webhook,并用check校验响应状态码是否为 200;状态码不符时会打印Invalid response. Received status ...错误日志。其他场景测的是不同节点/路径,按你要压测的对象选择即可。

执行过程与结果验证

压测启动后,控制台日志会按顺序给出当前阶段(来自 scenario-runner.ts 与 k6-executor.ts 的实际输出):

  1. Waiting for n8n <baseUrl> to become online—— 轮询等待实例在线;
  2. Setting up owner—— 如果实例还没有 owner,会用你提供的邮箱/密码初始化,然后登录;
  3. Running scenario: <前缀>-<场景名>,随后Loading and importing data(导入测试数据);
  4. Executing scenario script—— k6 开始执行,--vus个虚拟用户按--duration持续发请求。

k6 执行结束后,工具会把一段文本摘要直接打印到标准输出(通过注入的handleSummary生成textSummary),同时落盘一个<场景运行名>.summary.json文件,包含 k6 的完整 end-of-test 数据。判断本次压测是否成功,以两部分为准:

  • 终端的 k6 文本摘要(请求量、耗时分布等,数值取决于你的实例负载,不是固定值);
  • 场景中 k6 脚本的 check 结果,例如single-webhook场景会报告is status 200是否通过;如果看到Invalid response. Received status ...日志,说明实例侧返回了非 200,需要检查该 webhook 是否可用。

可选:采集实例应用指标

如果实例开启了 metrics 端点,压测期间可以额外采样:

docker run ghcr.io/n8n-io/n8n-benchmark:latest run \ --n8nBaseUrl=https://instance.url \ --n8nUserEmail=InstanceOwner@email.com \ --n8nUserPassword=InstanceOwnerPassword \ --vus=5 \ --duration=1m \ --scenarioFilter=single-webhook \ --collectAppMetrics

--collectAppMetrics(默认false,可用环境变量COLLECT_APP_METRICS控制)会让工具按--appMetricsPollInterval指定的间隔(默认5000毫秒)轮询实例的/metrics端点,启动/停止时分别打印Started polling app metrics from <url>/metrics every <n>msStopped polling app metrics

可选:把结果推送到 webhook 或 k6 输出

run命令还支持(均可用对应环境变量替代):

  • --resultWebhookUrl/--resultWebhookAuthHeader(环境变量BENCHMARK_RESULT_WEBHOOK_URLBENCHMARK_RESULT_WEBHOOK_AUTH_HEADER):测试结束后把汇总报告 POST 到指定 URL;
  • --out(k6 的--out参数,环境变量K6_OUT);
  • --k6ApiToken(环境变量K6_API_TOKEN):未指定 webhook 且未指定--out时,k6 会以--out cloud上报到 k6 cloud;
  • --tags:以逗号分隔的key=value形式给本次运行打标签;
  • --scenarioNamePrefix:场景运行名前缀,默认Unnamed

使用自定义场景

如果你想压测自己的工作流路径,可以准备自己的场景目录,通过-v挂载进容器的/scenarios,并用--testScenariosPath指向它:

# 假设你的场景文件在 ./scenarios 目录 docker run -v ./scenarios:/scenarios ghcr.io/n8n-io/n8n-benchmark:latest run \ --n8nBaseUrl=https://instance.url \ --n8nUserEmail=InstanceOwner@email.com \ --n8nUserPassword=InstanceOwnerPassword \ --vus=5 \ --duration=1m \ --testScenariosPath=/scenarios

自定义场景的目录组织与内置场景一致:manifest 文件(namedescriptionscriptPathscenarioData四个必填字段,schema 见 scenario.schema.json)、测试数据文件和一个 k6 脚本(脚本通过__ENV.API_BASE_URL获取实例地址)。

替代路径:不用预构建镜像运行 CLI

如果不想拉取官方镜像,可以按 README 从源码构建或使用本机的 k6:

本地构建 Docker 镜像(需在仓库根目录执行;注释说明 k6 没有 linux 的 arm64 构建,所以要按 amd64 平台构建):

docker build --platform linux/amd64 -t n8n-benchmark -f packages/@n8n/benchmark/Dockerfile . docker run \ -e N8N_USER_EMAIL=user@n8n.io \ -e N8N_USER_PASSWORD=password \ # For macos, n8n running outside docker -e N8N_BASE_URL=http://host.docker.internal:5678 \ n8n-benchmark

这里N8N_BASE_URLN8N_USER_EMAILN8N_USER_PASSWORD是三个 flag 对应的环境变量,示例值(user@n8n.io等)来自 README,执行前替换为真实值;http://host.docker.internal:5678是 macOS 上 n8n 运行在宿主机而非容器内时的地址。

不用 Docker:需要本机安装 k6 和 Node.js v20 或更高(README 的要求;另注意 package.json 的engines字段声明node >=24.0.0,两者不完全一致,建议直接按更高的 Node 24 准备环境),然后在 benchmark 包内构建后运行:

pnpm build # Run tests against http://localhost:5678 with specified email and password N8N_USER_EMAIL=user@n8n.io N8N_USER_PASSWORD=password ./bin/n8n-benchmark run

如果找不到 k6 可执行文件,工具会报错并提示将 k6 加入PATH或用K6_PATH环境变量(--k6ExecutablePath,默认k6)指定其路径。

限制与边界

  • 该 CLI 的定位是「对单个 n8n 实例运行一个或多个场景」(README 原文如此),内置的完整 benchmark suite(多种 n8n 部署拓扑./scripts/n8nSetups加云环境编排)属于仓库内部的全套基准流程(pnpm benchmark-locally/pnpm benchmark-in-cloud),不在「对已有运行实例压测」的路径内;
  • --vus默认 5、--duration默认1m,只测一个场景时务必显式传--scenarioFilter,否则会跑完目录下所有场景;
  • 压测会向实例导入测试工作流并真实触发请求,不要对承载生产关键流程的实例随意拉高--vus
  • 镜像默认基于 amd64 构建运行(k6 无 linux arm64 构建),在 Apple Silicon 等 arm64 机器上使用官方镜像时依赖容器平台的多架构支持。

【免费下载链接】n8nFair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.项目地址: https://gitcode.com/GitHub_Trending/n8/n8n

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询