60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
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;
|
|
}
|
|
}
|