n8n/packages/testing/playwright/tests/infrastructure/benchmarks/webhook/webhook-queue-baseline.spec.ts
Declan Carroll 60b5aa643d
test(benchmark): Add Playwright UI scenario benchmark framework + customer-scale executions-list spec (#30561)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 09:27:17 +00:00

58 lines
1.8 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { test } from '../../../../fixtures/base';
import { benchConfig } from '../../../../playwright-projects';
import { setupWebhook } from '../../../../utils/benchmark/webhook-driver';
import { runWebhookThroughputTest } from '../harness/webhook-throughput-harness';
// Queue-mode baseline at 1 main + 1 worker. Pair with `webhook-main-scaling`
// (2 mains + 2 workers) to read the multi-main scaling factor isolated from
// the direct→queue architecture change. Without this baseline, comparing
// `webhook-single-instance` (1m, 0w direct) to `webhook-main-scaling` would
// conflate "adding mains" with "switching to queue mode".
//
// Parameters intentionally match `webhook-main-scaling.spec.ts` (200 × 180s)
// so the comparison is apples-to-apples.
const MAINS = 1;
const WORKERS = 1;
const CONNECTIONS = 200;
const DURATION_SECONDS = 180;
test.use({ capability: benchConfig('webhook-queue-baseline', { mains: MAINS, workers: WORKERS }) });
test.describe(
'What is the webhook ingestion ceiling in queue mode at 1 main + 1 worker?',
{
tag: '@bench:webhook',
annotation: [
{ type: 'owner', description: 'Catalysts' },
{ type: 'question', description: 'webhook-queue-baseline' },
],
},
() => {
test(`Async webhook + 1 noop, 1KB payload, ${CONNECTIONS} connections × ${DURATION_SECONDS}s (${MAINS} main + ${WORKERS} worker)`, async ({
api,
services,
backendUrl,
}, testInfo) => {
const handle = setupWebhook({
scenario: {
nodeCount: 1,
payloadSize: '1KB',
nodeOutputSize: 'noop',
responseMode: 'onReceived',
},
});
await runWebhookThroughputTest({
handle,
api,
services,
testInfo,
baseUrl: backendUrl,
connections: CONNECTIONS,
durationSeconds: DURATION_SECONDS,
timeoutMs: (DURATION_SECONDS + 60) * 1000,
});
});
},
);