测试生成智能体设计文档
智能体名称: 测试生成智能体 (Test Generation Agent) 优先级: ⭐⭐⭐⭐ (高优先级) 技术栈: Python 3.11 + LangGraph + Claude 3.5 Sonnet 文档版本: v1.0 最后更新: 2025-10-28
一、功能概述
基于LangGraph构建的测试生成智能体,自动分析代码逻辑并生成高质量、可运行的测试用例,覆盖单元测试、集成测试和端到端测试。
核心价值
- 提升效率: 减少70%的测试编写时间
- 提高覆盖率: 自动识别未覆盖的代码路径并补充测试
- 保证质量: 生成的测试代码可编译可运行,符合团队规范
- 持续改进: 基于测试执行结果自动优化测试用例
二、LangGraph工作流设计
2.1 状态定义
输入状态:
- source_code: 源代码内容
- language: 编程语言(Java/Python/JavaScript)
- test_framework: 测试框架(JUnit5/TestNG/Pytest)
- coverage_requirement: 覆盖率要求(如80%)
- existing_tests: 现有测试代码(可选)
中间状态:
- code_structure: 代码结构分析结果(类、方法、依赖)
- test_scenarios: 测试场景列表
- generated_tests: 生成的测试代码
- compilation_result: 编译验证结果
- coverage_analysis: 覆盖率分析结果
输出状态:
- final_test_code: 最终测试代码
- coverage_report: 覆盖率报告
- improvement_suggestions: 改进建议
2.2 智能体节点
节点1: 代码结构分析节点
- 解析类结构、方法列表、参数类型、返回值类型
- 识别依赖关系(注入的Service、DAO等)
- 分析方法复杂度和调用关系
节点2: 测试场景识别节点
- 识别正常流程测试场景
- 识别边界条件(null、空字符串、极值)
- 识别异常场景(异常抛出、错误处理)
- 识别并发场景(如适用)
节点3: 测试代码生成节点
- 生成测试类和测试方法
- 自动生成Mock对象
- 生成测试数据和断言
- 遵循团队命名规范
节点4: 编译验证节点
- 尝试编译生成的测试代码
- 识别编译错误(导入缺失、类型错误等)
- 失败时触发修复节点
节点5: 测试执行节点
- 运行生成的测试用例
- 收集测试结果(通过/失败)
- 收集覆盖率数据
节点6: 覆盖率分析节点
- 分析代码覆盖率
- 识别未覆盖的代码路径
- 判断是否需要补充测试
节点7: 补充测试节点
- 针对未覆盖路径生成额外测试
- 循环直到达到覆盖率要求
节点8: 优化建议节点
- 分析测试质量(断言充分性、Mock合理性)
- 提供测试改进建议
- 推荐测试工具和最佳实践
2.3 工作流路由
开始
↓
[1. 代码结构分析] → 解析类和方法
↓
[2. 测试场景识别] → 识别测试场景
↓
[3. 测试代码生成] → 生成测试代码
↓
[4. 编译验证] → 编译检查
↓ 失败
修复代码 → 重新生成
↓ 成功
[5. 测试执行] → 运行测试
↓
[6. 覆盖率分析] → 检查覆盖率
↓ 不达标
[7. 补充测试] → 生成补充测试
↓ 达标
[8. 优化建议] → 提供改进建议
↓
结束
三、测试类型支持
3.1 单元测试生成
Java + JUnit 5 + Mockito
- 测试类命名:
XxxTest - 测试方法命名:
should_ExpectedBehavior_When_StateUnderTest - Mock框架: Mockito
- 断言库: AssertJ
Python + Pytest
- 测试文件命名:
test_xxx.py - 测试方法命名:
test_xxx_should_xxx - Mock框架: unittest.mock
- 断言: pytest原生断言
JavaScript + Jest
- 测试文件命名:
xxx.test.js - 测试方法命名:
describe/it结构 - Mock框架: Jest内置Mock
- 断言: Jest Matchers
3.2 集成测试生成
Spring Boot Test
- 使用
@SpringBootTest注解 - 自动配置测试环境
- 支持
@MockBean模拟外部依赖 - 生成API接口测试
Django Test
- 使用
TestCase或APITestCase - 自动创建测试数据库
- 生成API端点测试
3.3 端到端测试生成
基于用户故事生成测试
- 输入: 用户故事或需求描述
- 生成: Selenium/Playwright测试脚本
- 包含: 页面操作、断言、截图
四、Prompt模板
4.1 单元测试生成Prompt
你是一个资深的测试工程师,请为以下代码生成完整的单元测试。
## 源代码
{source_code}
## 代码结构分析
- 类名: {class_name}
- 方法列表: {methods}
- 依赖关系: {dependencies}
## 测试场景
{test_scenarios}
## 要求
1. 使用{test_framework}框架
2. 使用Mockito模拟依赖
3. 使用AssertJ进行断言
4. 测试方法名清晰表达测试意图
5. 覆盖所有公共方法
6. 包含正常流程、边界条件、异常场景
7. 添加必要的注释
## 输出格式
只输出完整可运行的测试代码,不要包含其他说明。
4.2 测试修复Prompt
以下测试代码编译失败,请修复编译错误:
## 测试代码
{test_code}
## 编译错误
{compilation_errors}
## 要求
1. 修复所有编译错误
2. 保持测试逻辑不变
3. 只输出修复后的完整代码
4.3 测试补充Prompt
当前测试覆盖率不足,请补充测试用例:
## 源代码
{source_code}
## 现有测试
{existing_tests}
## 未覆盖的代码路径
{uncovered_paths}
## 覆盖率报告
- 当前覆盖率: {current_coverage}%
- 目标覆盖率: {target_coverage}%
## 要求
1. 针对未覆盖路径生成新的测试用例
2. 保持与现有测试一致的风格
3. 确保新测试可运行
五、集成方案
5.1 触发方式
Git Hook触发
- 提交代码时自动检测是否有测试
- 缺少测试时自动生成并提交
CLI命令触发
# 为指定文件生成测试
maiban-ai test generate --file src/service/UserService.java
# 为整个模块生成测试
maiban-ai test generate --module user-service
# 补充测试提升覆盖率
maiban-ai test supplement --coverage 80
IDE插件触发
- 右键菜单: "Generate Tests with AI"
- 快捷键触发
- 实时预览生成的测试
5.2 与CI/CD集成
GitLab CI Pipeline
ai-test-generation:
stage: test
script:
- maiban-ai test generate --source-dir=src/
- mvn test
- maiban-ai test analyze-coverage --min-coverage=80%
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: target/site/jacoco/jacoco.xml
六、成本控制
成本目标: <$5/次生成
优化策略:
- 缓存代码结构分析结果(7天)
- 批量生成多个方法的测试(减少API调用)
- 简单方法使用Claude Haiku($0.25/1M)
- 复杂业务逻辑使用Claude Sonnet($3/1M)
- 生成失败后重试最多2次
七、数据存储
测试生成任务表 (test_generation_tasks)
- 任务ID、源代码文件、语言、框架
- 生成状态、生成耗时、Token消耗
- 测试代码、覆盖率、质量评分
测试用例库 (test_cases_library)
- 通用测试模板和最佳实践
- 按语言和框架分类
- 向量化存储,支持相似场景检索
八、效果评估
效率指标:
- 测试编写时间: 减少70%
- 测试生成成功率: >90%
- 生成的测试可运行率: >95%
质量指标:
- 测试覆盖率: 平均提升至85%
- 断言充分性: >90%
- Bug发现能力: 与人工测试相当
文档维护者: AI团队 技术负责人: 待定 创建日期: 2025-10-28 最后更新: 2025-10-28
