大数跨境

采纳率高达90%的测试用例生成智能体,看看我们是怎么做到的

采纳率高达90%的测试用例生成智能体,看看我们是怎么做到的 慧测
2026-01-24
0
导读:测试用例生成的准确性是衡量智能体强大与否的唯一标准90%的测试用例采纳率,看看我们是怎么做到的

微信: 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

维护团队: 但问智能技术团队

免费进群技术交流
图片
huice666
图片
danwen668


【声明】内容源于网络
0
0
慧测
专注人工智能前沿技术落地企业实战应用
内容 404
粉丝 0
慧测 专注人工智能前沿技术落地企业实战应用
总阅读104
粉丝0
内容404