🧪 CmdCode V0.5 自动测试框架

实现无人值守的自动化代码测试闭环 — 从提示词生成代码到智能评测验证

5
测试题目
5
全部通过
100%
通过率
60s
单题超时

核心特性

自动化工作流程

读取题目
启动CmdCode
生成代码
自动退出
智能评测
输出报告

完整的自动化闭环,无需人工干预

关键修复:自动退出机制

问题:单次执行模式下 CmdCode 不自动退出,导致测试超时失败

// src/cli.ts 第 1104 行(关键修复)
// 在 session save 后添加:
process.exit(0) // 单次执行模式自动退出

修复效果:超时问题彻底解决,5/5 测试全部自动完成

测试题目列表

涵盖算法、数学、字符串处理等多类型测试

最新测试执行报告

执行时间:2026-04-29 | 状态:全部通过

fibonacci PASS
测试用例: fibonacci(10)=55, fibonacci(0)=0, fibonacci(1)=1
quick_sort PASS
测试用例: [3,1,2]→[1,2,3], [5,4,3,2,1]→[1,2,3,4,5]
is_prime PASS
测试用例: is_prime(7)=true, is_prime(4)=false, is_prime(2)=true
reverse_string PASS
测试用例: "hello"→"olleh", "abc"→"cba"
factorial PASS
测试用例: factorial(5)=120, factorial(0)=1, factorial(1)=1

测试框架文件结构

tests/
├── test_data.json # 测试题目数据(5题)
├── run_single_test.sh # 单题执行器(60s超时)
├── evaluate_result.sh # 智能评测脚本
├── auto_loop.sh # 自动化循环入口
├── temp/ # 生成的代码文件
│ ├── fibonacci/
│ ├── quick_sort/
│ └── ...
└── results/ # 评测结果JSON
├── fibonacci_evaluation.json
└── ...

技术实现细节

图灵机级提示词序列 — 自动退出修复 & 闭环测试

以下是完全可行的图灵机级提示词序列,用于修复 CmdCode 单次执行模式下的自动退出问题,并形成自动化测试闭环。

提示词 1:检查当前单次执行模式的退出逻辑

执行对象:Hermes

操作:在 src/cli.ts 中搜索字符串 values.prompt 并定位到 main 函数处理单次执行的 if 块。

期望:找到类似 if (values.prompt) { ... } 的代码段。

提示词 2:定位 try 块结束与 return 语句

操作:在该 if 块内,找到 try { ... } catch (e) { ... } 语句。确认 try 块最后有 return 语句(或没有 return 直接结束 if)。

注意:当前代码在 try 块末尾可能是 return 或没有显式退出,但我们需要它显式退出进程。

提示词 3:精确修改代码——添加进程退出

操作:在 try 块中,找到 console.log(... session.saved ...) 语句的下一行(这是输出保存成功的日志)。在它之后、return 之前(如果有 return)插入一行:

process.exit(0);

如果 try 块后没有 return,则直接在该行后添加。同时确保 catch 块中已有 process.exit(1)(通常有 process.exit(1))。保存文件。

提示词 4:验证修改是否正确

操作:运行 bun run src/cli.ts -p "用Python打印Hello World"

验收:终端输出 AI 回复内容以及 session saved 信息。命令执行完后立即退回 shell 提示符,不挂起,不需要用户按任何键。echo $? 输出 0(表示正常退出)。

提示词 5:处理边界情况——确保后台任务不阻止退出

操作:在 main 函数中,查找 initMemorySystem() 的调用位置。如果 initMemorySystem() 在单次模式分支之前被执行(它很可能是),那么单次模式也会启动回填定时器,导致即使我们调用了 process.exit 也能退出(因为 process.exit 会强制终止所有定时器)。这已经满足要求,不做额外修改。

验收:无需行动。

提示词 6:确保 CMD_WORKSPACE 环境变量在单次模式生效(之前已修改?验证)

操作:运行 CMD_WORKSPACE=/tmp/testworkspace bun run src/cli.ts -p "创建一个文件 test.txt,内容为 hello"

验收:命令成功执行,文件 /tmp/testworkspace/test.txt 被创建,进程自动退出。若失败:在 cli.ts 的 main 函数开头,在 userAuthFlow() 之前,添加工作区环境变量覆盖逻辑(已在之前任务中完成,此处仅验证)。

提示词 7:重启测试框架并观察完整闭环

操作:进入 CmdCode 项目根目录,运行 bash tests/auto_loop.sh

验收:框架依次执行题库中的题目。对每个题目,调用 run_single_test.sh,它内部会启动 CmdCode 单次模式,现在应能正常退出而不超时。评估器判断通过/失败,失败时框架自动分析并尝试修复。整个循环运行至所有题目通过或无法修复为止。框架输出最终测试报告。

补充提示词:确保 CMD_WORKSPACE 环境变量生效

操作:在 src/cli.ts 的 main 函数中,找到 const userInfo = await userAuthFlow() 之后的代码。在 setUserWorkspace(userInfo.workspaceDir) 之前插入:

const workspaceOverride = process.env.CMD_WORKSPACE; if (workspaceOverride) { userInfo.workspaceDir = workspaceOverride; // 创建目录如果不存在 try { require('node:fs').mkdirSync(workspaceOverride, { recursive: true }); } catch {} }

验证:重复提示词 6 的验收步骤。

✓ 至此,自动化测试框架的"无人值守"闭环即可完整运行。

所有提示词都精确到可无脑执行,无需额外解释。

相关链接:

CmdCode 官网 | Gitee 仓库

🧪 自动测试框架 — 让 AI 编程可验证、可量化、可信赖