微信: huice666/danwen668
版本: 2.0
更新日期: 2026-01-24
作者: 但问智能技术团队
目录
● 1. 项目概述
● 2. 技术架构
● 3. 核心组件
● 4. 技术实现细节
● 5. 工作流程
● 6. 技术亮点
● 7. 性能优化
● 8. 总结
1. 项目概述
1.1 背景与目标
测试用例智能体是 AI 测试管理平台的核心组件之一,旨在利用大语言模型(LLM)的能力,自动化地根据需求文档、用户故事或功能描述生成高质量的测试用例。该项目解决了传统测试用例编写过程中的以下痛点:
● 效率低下:测试工程师需要手动编写大量重复性的测试用例
● 覆盖不全:人工设计测试场景容易遗漏边界条件和异常场景
● 维护困难:需求变更时需要手动更新大量相关测试用例
● 知识孤岛:业务规则、接口定义等信息分散在各个文档中
1.2 核心功能
┌─────────────────────────────────────────────────────────┐
│ 测试用例智能体核心功能矩阵 │
├─────────────────────────────────────────────────────────┤
│ 📊 需求分析 │ 自动分析用户需求,判断检索需求 │
│ 🔍 知识检索 │ 从知识库检索业务规则、接口定义 │
│ ✍️ 用例生成 │ 生成结构化的测试用例(普通/BDD) │
│ 🔬 质量评审 │ 评审用例完整性、准确性、可执行性 │
│ 🔄 智能优化 │ 识别问题并提供改进建议 │
└─────────────────────────────────────────────────────────┘
1.3 支持的测试用例格式
系统支持两种主流的测试用例格式:
1. 普通测试用例(Test Case)
{
"name":"用户登录成功",
"test_case_steps":[
{"step":"打开登录页面","result":"页面正常显示"},
{"step":"输入用户名和密码","result":"输入成功"},
{"step":"点击登录按钮","result":"跳转到首页"}
]
}
2. BDD 测试用例(Behavior Driven Development)
{
"name":"用户登录场景",
"feature":"用户认证",
"scenario":"用户使用正确的凭据登录",
"background":"Given 用户已注册\nAnd 用户账号状态正常"
}
2. 技术架构
2.1 整体架构图
2.2 技术栈
2.3 目录结构
backend/app/agents/testcase/
├── agent.py # 智能体主文件
├── tools.py # 工具函数定义
├── pdf_processor.py # PDF 文档处理器
├── agent_skills/ # 技能文件目录
│ └── skills/
│ ├── analyzer/ # 需求分析技能
│ │ └── SKILL.md
│ ├── generator/ # 用例生成技能
│ │ └── SKILL.md
│ └── reviewer/ # 用例评审技能
│ └── SKILL.md
└── workspace/ # 工作空间目录
3. 核心组件
3.1 智能体主体(Agent)
智能体采用 langchain 框架构建,核心配置如下:
agent = create_agent(
model=model,# DeepSeek Chat 模型
tools=TESTCASE_TOOLS,# 工具集
system_prompt="""...""",# 系统提示词
middleware=[skills_middleware, context_middleware],# 中间件链
backend=workspace_backend,# 工作空间后端
context_schema=TestCaseGeneratorContext,# 上下文模式
)
关键设计要点:
1. 中间件链模式:使用中间件链处理请求,每个中间件负责特定功能
2. 上下文感知:通过 TestCaseGeneratorContext 传递运行时参数
3. 虚拟文件系统:使用 FilesystemBackend 实现文件操作的虚拟化
3.2 技能中间件(SkillsMiddleware)
技能中间件负责从文件系统加载技能定义,并注入到系统提示词中:
skills_middleware = SkillsMiddleware(
backend=skills_backend,# 文件系统后端
sources=["/skills/analyzer/",# 技能源路径
"/skills/generator/",
"/skills/reviewer/"]
)
技能文件格式(SKILL.md):
--- name: analyzer-skill
description: 当您需要分析测试需求时,请使用此技能。 --- 您是测试需求分析专家...
# 核心职责 1. 理解用户需求 2. 判断检索需求 3. 执行知识库检索 4. 提取关键信息
# 何时使用此技能 - 用户提供了功能名称但缺少详细描述 - 需要了解业务规则或流程逻辑 ... 优势:
● ✅ 模块化:每个技能独立文件,易于维护
● ✅ 可扩展:添加新技能无需修改核心代码
● ✅ 版本控制:技能文件纳入 Git 管理
● ✅ 热重载:修改技能文件后无需重启服务
3.3 上下文注入中间件(ContextInjectionMiddleware)
自定义中间件,负责在运行时注入动态上下文参数:
class ContextInjectionMiddleware(AgentMiddleware):
async def awrap_model_call(
self,
request: ModelRequest,
handler: Callable[[ModelRequest], ModelResponse],
)-> ModelResponse:
# 获取运行时上下文
project_identifier = request.runtime.context.project_identifier
folder_id = request.runtime.context.folder_id
template_type = request.runtime.context.template_type
# 构建上下文信息
context_info =f"""
## 🎯 当前上下文信息(重要!)
-**项目标识符**: `{project_identifier}`
-**文件夹 ID**: `{folder_id}`
-**模板类型**: `{template_type}`
...
# 注入到系统消息
request.system_message.content = request.system_message.content + context_info
# 继续处理
return await handler(request)
注入流程图:
3.4 工具集(Tools)
工具集是智能体与外部系统交互的桥梁:
TESTCASE_TOOLS =[
# 核心工具
create_test_case_tool,# 创建单个测试用例
update_test_case_tool,# 更新测试用例
batch_create_test_cases_tool,# 批量创建
parse_document_from_url,# 文档解析
# 动态加载的工具
...asyncio.run(get_rag_tools())# RAG 检索工具
]
工具调用流程:
4. 技术实现细节
4.1 三大核心技能
技能 1:analyzer - 需求分析与知识检索
职责:
1. 分析用户需求,理解功能和测试范围
2. 判断是否需要从知识库检索信息
3. 执行知识库检索,获取业务规则、接口定义
4. 提取关键信息,为后续生成提供基础
检索策略:
判断检索需求的决策树:
用户输入
│
├─ 功能名称 + 详细描述?
│ ├─ 是 → ❌ 不需要检索
│ └─ 否 → 继续判断
│
├─ 涉及业务逻辑?
│ ├─ 是 → ✅ 需要检索
│ └─ 否 → 继续判断
│
├─ 涉及接口测试?
│ ├─ 是 → ✅ 需要检索
│ └─ 否 → 继续判断
│
└─ 需要历史数据?
├─ 是 → ✅ 需要检索
└─ 否 → ❌ 不需要检索
技能 2:generator - 测试用例生成
职责:
1. 设计全面的测试场景(正常、异常、边界)
2. 编写结构化的测试用例
3. 设置用例属性(优先级、标签、状态)
4. 支持批量创建
测试场景设计矩阵:
│ 正常流程 │ 异常流程 │ 边界条件 │ 特殊场景
────────────┼─────────────┼─────────────┼─────────────┼─────────────
功能测试 │ ✅ │ ✅ │ ✅ │ ✅
接口测试 │ ✅ │ ✅ │ ✅ │ ✅
性能测试 │ ✅ │ ✅ │ - │ ✅
安全测试 │ ✅ │ ✅ │ ✅ │ ✅
用例属性映射:
技能 3:reviewer - 测试用例评审与优化
职责:
1. 评审测试用例的完整性、准确性、可执行性
2. 识别测试用例中的问题和遗漏
3. 提供改进建议和优化方案
4. 更新和优化已有测试用例
质量评估维度:
完整性评估
├── 必填字段完整
├── description 清晰
├── preconditions 明确
└── priority 设置合理
准确性评估
├── 测试步骤清晰具体
├── 步骤顺序逻辑正确
├── 预期结果明确可验证
└── 符合业务规则
可执行性评估
├── 前置条件可实现
├── 提供测试数据
└── 可独立执行
覆盖率评估
├── 覆盖正常流程
├── 覆盖异常流程
└── 覆盖边界条件
4.2 工具调用规范
工具 1:rag_query_data - 知识库检索
rag_query_data(
query="订单支付功能的需求、业务规则和接口定义",
mode="mix",# mix/local/naive/global/hybrid
top_k=15,# 返回结果数量
chunk_top_k=5,# 文本块数量
enable_rerank=True# 是否启用重排序
)
参数说明:
工具 2:create_test_case_tool - 创建测试用例
create_test_case_tool(
# 上下文参数(必须使用上下文中的值)
project_identifier=project_identifier,
folder_id=folder_id,
template=template_type,
# 用例内容
name="用户使用正确凭据登录成功",
description="验证用户使用正确的用户名和密码能够成功登录",
preconditions="用户已注册且账号状态正常",
priority="critical",
tags=["登录","核心功能","正向测试"],
# 测试步骤(普通模板)
test_case_steps=[
{"step":"打开登录页面","result":"页面正常显示登录表单"},
{"step":"输入正确的用户名和密码","result":"输入框接受输入"},
{"step":"点击登录按钮","result":"成功登录并跳转到首页"}
]
# 或 BDD 字段(BDD 模板)
# feature="用户认证",
# scenario="用户使用正确的凭据登录",
# background="Given 用户已注册\nAnd 用户账号状态正常"
)
工具 3:batch_create_test_cases_tool - 批量创建
batch_create_test_cases_tool(
project_identifier=project_identifier,
folder_id=folder_id,
test_cases=[
{
"name":"用户使用正确凭据登录成功",
"priority":"critical",
"test_case_steps":[...]
},
{
"name":"用户输入错误密码登录失败",
"priority":"high",
"test_case_steps":[...]
},
{
"name":"用户名为空时显示错误提示",
"priority":"medium",
"test_case_steps":[...]
}
]
)
4.3 RAG 知识检索集成
RAG MCP Server 连接:
async def get_rag_tools()->list:
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({
"rag-server":{
"url":"http://127.0.0.1:8002/sse",
"transport":"sse",
}
})
tools =await client.get_tools()
return tools
检索内容类型:
知识库内容
├── 测试用例
│ ├── 用例步骤
│ ├── 预期结果
│ ├── 测试数据
│ └── 执行历史
├── 需求文档
│ ├── 功能需求
│ ├── 业务规则
│ ├── 用户故事
│ └── 验收标准
├── API接口
│ ├── URL 和方法
│ ├── 请求参数
│ ├── 返回值格式
│ └── 认证方式
├── 性能测试
│ ├── 性能指标
│ ├── 基准值
│ └── 测试结果
└── 技术文档
├── 架构设计
├── 数据模型
└── 部署配置
5. 工作流程
5.1 完整工作流程图
5.2 请求处理时序图
5.3 决策流程
6. 技术亮点
6.1 技能架构(Skills Architecture)
设计理念:
将复杂的智能体能力拆分为独立的、可复用的技能模块,每个技能专注于特定的任务领域。
优势对比:
传统单体架构 技能架构
┌──────────────────┐ ┌──────────────────┐
│ │ │ ┌────────────┐ │
│ 巨大提示词 │ │ │ analyzer │ │
│ │ │ └────────────┘ │
│ - 需求分析 │ │ ┌────────────┐ │
│ - 用例生成 │ VS │ │ generator │ │
│ - 质量评审 │ │ └────────────┘ │
│ - 工具调用 │ │ ┌────────────┐ │
│ - ... │ │ │ reviewer │ │
│ │ │ └────────────┘ │
└──────────────────┘ └──────────────────┘
❌ 难以维护 ✅ 模块化维护
❌ 难以扩展 ✅ 独立扩展
❌ 难以复用 ✅ 跨项目复用
❌ 版本管理困难 ✅ Git 友好
实现细节:
# 技能文件:agent_skills/skills/analyzer/SKILL.md
---
name: analyzer-skill
description: 需求分析与知识检索专家
---
您是测试需求分析专家...
# 核心职责
1. 理解用户需求
2. 判断检索需求
3. 执行知识库检索
4. 提取关键信息
技能加载机制:
SkillsMiddleware(
backend=FilesystemBackend(root_dir=skills_root),
sources=["/skills/analyzer/","/skills/generator/","/skills/reviewer/"]
)
加载过程:
1. 扫描指定目录
2. 读取 SKILL.md 文件
3. 解析 frontmatter(name, description)
4. 提取技能内容
5. 注入到系统提示词
6.2 中间件链模式
设计模式:
采用责任链模式,每个中间件负责特定的处理逻辑。
middleware=[skills_middleware, context_middleware]
执行顺序:
Request
│
├─▶ SkillsMiddleware
│ └─ 加载技能文件
│ └─ 注入技能内容
│
├─▶ ContextInjectionMiddleware
│ └─ 提取运行时上下文
│ └─ 注入动态参数
│
└─▶ Agent Model
└─ 最终决策
优势:
● 解耦:每个中间件独立,互不影响
● 可组合:灵活添加、移除、重新排序中间件
● 可测试:每个中间件可单独测试
● 可复用:中间件可在不同 Agent 间复用
6.3 上下文感知设计
问题:
Agent 需要知道运行时参数(项目 ID、文件夹 ID、模板类型),但不能依赖用户手动提供。解决方案:
@dataclass
class TestCaseGeneratorContext:
"""上下文模式"""
project_identifier:str=""
folder_id:str=""
template_type:str="test_case"
注入机制:
Frontend Request
{
"message": "生成测试用例",
"context": {
"project_identifier": "PROJ-001",
"folder_id": "uuid-xxx",
"template_type": "test_case"
}
}
│
▼
Agent 接收
│
▼
ContextInjectionMiddleware
- 提取 context
- 构建提示词
- 注入系统消息
│
▼
LLM 决策
- 知晓项目信息
- 使用正确参数
- 调用工具
6.4 RAG 知识检索集成
混合检索架构:
检索模式对比:
6.5 工具生态系统
工具分类:
TESTCASE_TOOLS
├── 核心工具
│ ├── create_test_case_tool - 创建测试用例
│ ├── update_test_case_tool - 更新测试用例
│ └── batch_create_test_cases_tool - 批量创建
├── 数据获取工具
│ ├── rag_query_data - 知识库检索
│ └── parse_document_from_url - 文档解析
└── 辅助工具
└── (未来扩展)
工具设计原则:
1. 单一职责:每个工具只做一件事
2. 幂等性:相同输入产生相同输出
3. 可组合:工具可组合使用
4. 错误处理:清晰的错误信息
5. 类型提示:完整的类型注解
7. 性能优化
7.1 缓存策略
PDF 文档缓存:
# 全局单例,启用缓存
_pdf_processor = PDFProcessor(enable_cache=True)
RAG 检索缓存:
查询哈希 ──▶ 缓存检查 ──▶ 命中 ──▶ 返回结果
│ │
│ ▼
│ 未命中
│ │
▼ ▼
查询数据库 ◀──────── 执行检索 ◀─ RAG Server
7.2 并发处理
批量创建优化:
# 串行处理
for test_case in test_cases:
create_test_case_tool(test_case)# 慢
# 并发处理
async def batch_create_concurrent(test_cases):
tasks =[create_test_case_tool(tc)for tc in test_cases]
return await asyncio.gather(*tasks)
7.3 异步 I/O
HTTP 请求异步化:
async with httpx.AsyncClient(timeout=30.0)as client:
response =await client.request(
method=method,
url=url,
json=json_data,
)
优势:
● 非阻塞 I/O
● 高并发处理
● 资源利用率高
8. 总结
8.1 技术创新点
1. 技能架构:模块化、可扩展的智能体设计
2. 中间件链:灵活的请求处理机制
3. 上下文感知:自动注入运行时参数
4. RAG 集成:知识驱动的测试用例生成
5. 工具生态:丰富的工具支持
8.2 应用价值
效率提升
├── 自动化生成:减少 80% 手动编写时间
├── 批量创建:一次性生成多个相关用例
└── 智能检索:快速获取业务规则和接口定义
质量提升
├── 全面覆盖:正常、异常、边界场景
├── 业务对齐:基于知识库的准确信息
└── 质量评审:自动识别问题和遗漏
维护便利
├── 需求变更:快速更新相关用例
├── 知识沉淀:业务规则集中管理
└── 版本控制:所有变更可追溯
8.3 未来展望
短期计划
├── 支持更多测试用例模板
├── 优化 RAG 检索准确度
└── 增强错误处理能力
中期计划
├── 支持测试数据生成
├── 集成测试执行引擎
└── 提供测试报告功能
长期愿景
├── 自主学习能力
├── 跨项目知识迁移
└── 智能测试策略推荐
附录
A. 配置文件
settings.py
class Settings(BaseSettings):
# 测试用例工作目录配置
testcase_workspace_root:str="backend/app/agents/testcase/workspace"
testcase_skills_root:str="backend/app/agents/testcase/agent_skills"
B. 相关文档
● DeepSeek API 文档
● LangChain 文档
● MCP 协议规范
📞 支持与反馈
微信: huice666/danwen668
文档版本: 2.0
最后更新: 2026-01-24
维护团队: 但问智能技术团队
|
|

