autotest-agent
AI 驱动的 Python 单元测试生成工具。输入源码,自动生成 pytest 测试,沙箱验证,失败自修复。
当前架构(2026-08)
CLI → Orchestrator.run(source)
├─ 文件级 (默认): 每个 .py 文件 → 一个 agent
└─ 组级 (AUTOTEST_GROUP=on): 项目函数 → 依赖图 → 社区检测分组 → 每组一个 agent
Agent 循环 (AUTOTEST_PIPELINE=fixed 时启用, 无 LLM 决策):
generate_test → run_test → fix_test(收敛刹车) → get_coverage → done
默认 ReAct (LangChain React agent): LLM 自主迭代, recursion_limit 上限
依赖分组 (A2):
DependencyGraph.build() 建跨文件边 → GroupBuilder 社区检测分组
→ DepGroup 拓扑排序合并源码 (被依赖方在前) → LLM 看完整因果链
组间并行 (B2):
asyncio.gather 并发跑每组
tools.py 模块全局 → ContextVar, 每组独立状态, 无串扰
核心能力
| 能力 | 实现 |
|---|---|
| AST 解析 | 函数签名、类方法、继承链、构造函数 |
| 依赖分组 | group_by_dependency() 社区检测 + 拓扑合并 |
| 组间并行 | asyncio.gather + ContextVar 隔离 |
| 收敛刹车 (fixed 管道) | check_convergence(3) 同类错误 3 次即停 |
| 沙箱验证 | 包树镜像 + 最小化环境 + SecurityScanner(别名/间接调用拦截)+ 网络屏蔽 |
| 语义拆分 | status: verified / generated / failed |
| 反幻觉 (fixed 管道) | API 参考表 + BANNED 扫描 + 生成后验证 |
质量评估(cerberus 46 组,历史数据)
| # | 维度 | 值 | 说明 |
|---|---|---|---|
| 1 | 通过率 | 85.2% | 2431/2854 测试通过 |
| 2 | 覆盖率 | 93.9% | 行覆盖高 |
| 3 | 突变杀死率 | 33.7% | 短板:行为覆盖不足 |
| 4 | API 幻觉 | 1 处 | 极低 |
| 5 | 黑盒率 | 92.9% | 走公共 API |
| 6 | 模块命中 | 100% | 每组测对目标 |
| 7 | 重复率 | 8.8% | 低 |
| 8 | 断言有效性 | 83.5% | 真值断言为主 |
| 9 | 覆盖盲区 | 1 | BareValidator misuse |
关键洞察:覆盖率 93.9%(行覆盖)与突变杀死率 33.7%(行为覆盖)的巨大差距,说明测试走到大多数代码行,但只验证了 1/3 的操作符行为。这是"断言深度不足"的量化证据——prompt 应更强调对每个操作符分支写具体断言,而非仅让测试跑通。
评估工具:evaluate_generated.py 9 维评估,支持通过率/覆盖率/突变/幻觉/黑盒/模块/重复/断言/盲区。
用法
# 安装
pip install -e .
# 配置 API key (推荐环境变量; 或写 autotest.yaml 的 llm.api_key)
export DEEPSEEK_API_KEY=sk-xxx
# 文件级生成
autotest generate ./src/ --coverage 80
# 组级生成 (依赖分组 + 并行)
AUTOTEST_GROUP=on autotest generate ./src/ --coverage 80
# 预览
autotest generate ./src/ --dry-run
对比
- 固定管道 vs ReAct: 固定管道快 8x (5轮封顶), ReAct 覆盖率略高 (LLM 自主迭代)。默认走 ReAct;固定管道用
AUTOTEST_PIPELINE=fixed - 组级 vs 文件级: 组级根治跨文件盲区 (LLM 看完整依赖链), 文件级简单。组级用
AUTOTEST_GROUP=on
项目结构
src/autotest/
├── cli/ # CLI 入口 (generate / config)
├── analyzer/ # AST 解析、依赖图、分组、introspector
├── agent/ # ReAct agent、固定管道引擎、工具、ContextVar 状态、沙箱
├── llm/ # LangChain/DeepSeek Provider、PromptTemplate、middleware
├── config.py # 配置模型 (llm/agent/execution/output)
└── orchestrator.py # 文件级 + 组级调度
test_projects_real/ # cerberus 真实项目 (验证用)
generated_tests/ # 生成测试输出
run_cerberus.py # cerberus 全量生成脚本
evaluate_generated.py # 9 维质量评估
_deprecated/ # 历史死代码归档 (含 checkpoint/rate_limiter/edge_detector/mock_constructor 等)
注:早期设计模块(edge_detector、mock_constructor、metrics、output、verify、sdk、trace、plugins、rate_limiter)已归档到
_deprecated/,未参与主流程。
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file autotest_agent-0.2.0.tar.gz.
File metadata
- Download URL: autotest_agent-0.2.0.tar.gz
- Upload date:
- Size: 36.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c8cbee19cfbf0cd119bfd4ea1ec9ae73e1b77fa2f4409e79d4bd2f0fc8db6c0
|
|
| MD5 |
c8d3db0b9735ddda818666c03ca21f7f
|
|
| BLAKE2b-256 |
f1bf0b1824b417dd87d4cca9e3e400d7e6dfceae5f29fc2277260486fbab0de9
|
File details
Details for the file autotest_agent-0.2.0-py3-none-any.whl.
File metadata
- Download URL: autotest_agent-0.2.0-py3-none-any.whl
- Upload date:
- Size: 42.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26f8be44472abdfafc8f0392a96d45fd1753dd24203d8495a73c900f90dbdd29
|
|
| MD5 |
9cc77912b5d6cf1da1c1410e3a30a537
|
|
| BLAKE2b-256 |
e96e9f5b070f4fddedf459759fd443e7c8c74bc20943fb94b11f9e67e60add1f
|