UNPKG

k6-cucumber-steps

Version:

Generate k6 test scripts from Cucumber feature files

95 lines 4.81 kB
#!/usr/bin/env node "use strict"; 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