import * as fs from 'fs'; import * as yargs from 'yargs'; import { SmartTestSelector } from '../smart-test-selector'; const argv = yargs .option('input', { alias: 'i', type: 'string', description: '变更文件列表文件路径', }) .option('output', { alias: 'o', type: 'string', description: '输出文件路径', default: 'selected-tests.json', }) .option('report', { alias: 'r', type: 'string', description: '分析报告输出路径', default: 'test-selection-report.md', }) .option('priority', { alias: 'p', type: 'string', choices: ['high', 'medium', 'low', 'all'], default: 'all', description: '测试优先级过滤', }) .option('level', { alias: 'l', type: 'string', choices: ['smoke', 'functional', 'all'], default: 'all', description: '测试级别过滤', }) .argv as any; async function main() { const selector = new SmartTestSelector(); let changedFiles: string[] = []; if (argv.input) { // 从文件读取变更文件列表 const content = fs.readFileSync(argv.input, 'utf-8'); changedFiles = content.split('\n').filter(f => f.trim()); } else { // 从Git获取变更文件 changedFiles = selector.getChangedFilesFromGit(); } console.log(`📊 分析 ${changedFiles.length} 个变更文件...`); const result = selector.selectTestsByChanges(changedFiles, { priority: argv.priority, testLevel: argv.level, }); // 保存结果 fs.writeFileSync(argv.output, JSON.stringify(result, null, 2)); console.log(`✅ 测试选择结果已保存到: ${argv.output}`); // 保存报告 fs.writeFileSync(argv.report, result.analysisReport); console.log(`✅ 分析报告已保存到: ${argv.report}`); // 输出摘要 console.log('\n=== 选择结果摘要 ==='); console.log(`变更文件: ${result.changedFiles.length} 个`); console.log(`受影响模块: ${result.affectedModules.length} 个`); console.log(`选中测试: ${result.selectedTests.length} 个`); } main().catch(console.error);