尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

n8n 如何用 n8n-benchmark 压测工具对运行中的实例执行并发请求基准测试 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/n8nn8n 仓库内置了一个名为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 \ --n8nBaseUrlhttps://instance.url \ --n8nUserEmailInstanceOwneremail.com \ --n8nUserPasswordInstanceOwnerPassword \ --vus5 \ --duration1m \ --scenarioFiltersingle-webhook两个执行参数决定压测的强度--vus并发请求数源码中的描述是 Number of concurrent requests to make默认5--duration压测持续时间必须带单位例如1m、30s默认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-data、credential-http-node、data-table-node、http-node、js-code-node、multiple-webhooks、py-code-node、set-node-expressions、single-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 的实际输出Waiting for n8n baseUrl to become online—— 轮询等待实例在线Setting up owner—— 如果实例还没有 owner会用你提供的邮箱/密码初始化然后登录Running scenario: 前缀-场景名随后Loading and importing data导入测试数据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 \ --n8nBaseUrlhttps://instance.url \ --n8nUserEmailInstanceOwneremail.com \ --n8nUserPasswordInstanceOwnerPassword \ --vus5 \ --duration1m \ --scenarioFiltersingle-webhook \ --collectAppMetrics--collectAppMetrics默认false可用环境变量COLLECT_APP_METRICS控制会让工具按--appMetricsPollInterval指定的间隔默认5000毫秒轮询实例的/metrics端点启动/停止时分别打印Started polling app metrics from url/metrics every nms与Stopped polling app metrics。可选把结果推送到 webhook 或 k6 输出run命令还支持均可用对应环境变量替代--resultWebhookUrl/--resultWebhookAuthHeader环境变量BENCHMARK_RESULT_WEBHOOK_URL、BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER测试结束后把汇总报告 POST 到指定 URL--outk6 的--out参数环境变量K6_OUT--k6ApiToken环境变量K6_API_TOKEN未指定 webhook 且未指定--out时k6 会以--out cloud上报到 k6 cloud--tags以逗号分隔的keyvalue形式给本次运行打标签--scenarioNamePrefix场景运行名前缀默认Unnamed。使用自定义场景如果你想压测自己的工作流路径可以准备自己的场景目录通过-v挂载进容器的/scenarios并用--testScenariosPath指向它# 假设你的场景文件在 ./scenarios 目录 docker run -v ./scenarios:/scenarios ghcr.io/n8n-io/n8n-benchmark:latest run \ --n8nBaseUrlhttps://instance.url \ --n8nUserEmailInstanceOwneremail.com \ --n8nUserPasswordInstanceOwnerPassword \ --vus5 \ --duration1m \ --testScenariosPath/scenarios自定义场景的目录组织与内置场景一致manifest 文件name、description、scriptPath、scenarioData四个必填字段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_EMAILusern8n.io \ -e N8N_USER_PASSWORDpassword \ # For macos, n8n running outside docker -e N8N_BASE_URLhttp://host.docker.internal:5678 \ n8n-benchmark这里N8N_BASE_URL、N8N_USER_EMAIL、N8N_USER_PASSWORD是三个 flag 对应的环境变量示例值usern8n.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_EMAILusern8n.io N8N_USER_PASSWORDpassword ./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),仅供参考
返回列表