UNPKG

@n8n/n8n-benchmark

Version:

Cli for running benchmark tests for n8n

60 lines (50 loc) 1.82 kB
import { Command, Flags } from '@oclif/core'; import { loadConfig } from '@/config/config'; import { ScenarioLoader } from '@/scenario/scenarioLoader'; import { ScenarioRunner } from '@/testExecution/scenarioRunner'; import { N8nApiClient } from '@/n8nApiClient/n8nApiClient'; import { ScenarioDataFileLoader } from '@/scenario/scenarioDataLoader'; import { K6Executor } from '@/testExecution/k6Executor'; export default class RunCommand extends Command { static description = 'Run all (default) or specified test scenarios'; // TODO: Add support for filtering scenarios static flags = { scenarios: Flags.string({ char: 't', description: 'Comma-separated list of test scenarios to run', required: false, }), scenarioNamePrefix: Flags.string({ description: 'Prefix for the scenario name. Defaults to Unnamed', required: false, }), }; async run() { const config = await this.loadConfigAndMergeWithFlags(); const scenarioLoader = new ScenarioLoader(); const scenarioRunner = new ScenarioRunner( new N8nApiClient(config.get('n8n.baseUrl')), new ScenarioDataFileLoader(), new K6Executor({ k6ExecutablePath: config.get('k6.executablePath'), k6ApiToken: config.get('k6.apiToken'), n8nApiBaseUrl: config.get('n8n.baseUrl'), }), { email: config.get('n8n.user.email'), password: config.get('n8n.user.password'), }, config.get('scenarioNamePrefix'), ); const allScenarios = scenarioLoader.loadAll(config.get('testScenariosPath')); await scenarioRunner.runManyScenarios(allScenarios); } private async loadConfigAndMergeWithFlags() { const config = loadConfig(); const { flags } = await this.parse(RunCommand); if (flags.scenarioNamePrefix) { config.set('scenarioNamePrefix', flags.scenarioNamePrefix); } return config; } }