k6-cucumber-steps
Version:
Generate k6 test scripts from Cucumber feature files
95 lines • 4.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// src/cli.ts
const commander_1 = require("commander");
const init_command_1 = require("./commands/init.command");
const feature_parser_1 = require("./generators/feature.parser");
const k6_script_generator_1 = require("./generators/k6-script.generator");
const fs_1 = __importDefault(require("fs"));
// Package info
const packageJson = require("../package.json");
commander_1.program
.name("k6-cucumber-steps")
.description("Generate k6 test scripts from Cucumber feature files")
.version(packageJson.version);
commander_1.program
.command("init")
.description("Initialize a new k6-cucumber project")
.option("-l, --lang <language>", "Programming language (js or ts)", "ts")
.argument("[path]", "Output directory path", ".")
.action(async (path, options) => {
const initCmd = new init_command_1.InitCommand();
await initCmd.execute(path, options.lang);
});
commander_1.program
.command("generate")
.description("Generate k6 scripts from feature files")
.option("-f, --features <path>", "Path to feature files", "./features")
.option("-o, --output <path>", "Output path for generated scripts", "./generated")
.option("--exclude-tags <tags>", "Exclude scenarios by tags (comma-separated)")
.option("-l, --lang <language>", "Output language (js or ts)", "ts")
.option("--tags <tags>", "Filter scenarios by tags")
.action(async (options) => {
await generateK6Scripts(options);
});
async function generateK6Scripts(options) {
console.log("Generating k6 scripts from feature files...");
console.log(`📂 Searching for feature files in: ${options.features || "./features"}`);
const parser = new feature_parser_1.FeatureParser();
const features = await parser.loadAndParseFeatures(options.features || "./features");
console.log(`✅ Found ${features.length} feature file(s)`);
// Count total scenarios before filtering
const totalScenarios = features.reduce((sum, f) => sum + f.scenarios.length, 0);
console.log(`📋 Total scenarios found: ${totalScenarios}`);
// Include by tags
if (options.tags) {
const includeTags = options.tags.split(",").map(t => t.trim()).filter(t => t);
console.log(`🏷️ Including scenarios with tags: ${includeTags.join(', ')}`);
let beforeCount = totalScenarios;
features.forEach((feature) => {
feature.scenarios = feature.scenarios.filter((scenario) => includeTags.some(tag => scenario.tags.includes(tag)));
});
const afterCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
console.log(` Filtered: ${beforeCount} → ${afterCount} scenarios`);
}
// Exclude by tags
if (options.excludeTags) {
const excludeTags = options.excludeTags.split(",").map(t => t.trim()).filter(t => t);
console.log(`🚫 Excluding scenarios with tags: ${excludeTags.join(', ')}`);
let beforeCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
features.forEach((feature) => {
feature.scenarios = feature.scenarios.filter((scenario) => !excludeTags.some(tag => scenario.tags.includes(tag)));
});
const afterCount = features.reduce((sum, f) => sum + f.scenarios.length, 0);
console.log(` Filtered: ${beforeCount} → ${afterCount} scenarios`);
}
// Flatten all scenarios
const allScenarios = features.flatMap((f) => f.scenarios);
const metadata = parser.loadScenarioMetadata(allScenarios);
console.log(`📝 Processing ${allScenarios.length} scenario(s) for script generation...`);
const generator = new k6_script_generator_1.K6ScriptGenerator();
const config = {
language: options.lang,
featuresDir: options.features || "./features",
outputDir: options.output || "./generated",
includeHtmlReporter: true,
author: "Enyimiri Chetachi Paschal (qaPaschalE)",
version: packageJson.version,
};
const k6Script = generator.generateK6File(allScenarios, metadata, config);
const outputDir = options.output || "./generated";
// Ensure output directory exists
if (!fs_1.default.existsSync(outputDir)) {
fs_1.default.mkdirSync(outputDir, { recursive: true });
}
const outputFile = `${options.output}/test.generated.${options.lang}`;
fs_1.default.writeFileSync(outputFile, k6Script);
console.log(`✅ Generated k6 script: ${outputFile}`);
console.log(`📋 Scenarios processed: ${allScenarios.length}`);
}
commander_1.program.parse();
//# sourceMappingURL=cli.js.map