AI TestOps 7步全链路测试工作流
AI TestOps 7步全链路测试工作流
从实践到自动化:一个测试效率工具的诞生
一、产生原因
1.1 业务背景
在上一季度完成 AI 驱动 QA 方案重构(https://aomi.yuque.com/nw075n/ona3d9/lidmtriltmit0m2c)后,为进一步提升执行效率,现决定将整套业务流程落地为自动化运行模式。初期我计划直接搭建专属平台实现全域落地,经过初步实践验证后发现,现阶段直接平台化落地体量偏大、落地成本较高。综合实际业务现状考量,最终确定先行通过技能编排完成工作流搭建,再依托 Hermes 等智能 Agent 能力串联打通全流程。下文将详细阐述整体落地实现方案。
在澳觅新零售业务中,每个迭代周期都需要对需求文档进行完整的测试分析:
- 需求分析:理解业务背景、功能模块、核心流程
- 测试点拆解:从需求中提取测试点,按优先级分类
- 测试用例生成:为每个测试点编写详细的测试用例
- 代码走查:审查代码实现是否符合需求
- 覆盖率分析:评估测试用例对需求和代码的覆盖程度
- 测试报告生成:汇总所有结果,输出专业报告
1.2 痛点分析
| 痛点 | 影响 | 量化 |
|---|---|---|
| 手工分析耗时 | 需求分析、测试点拆解需要大量时间 | 每个需求 2-4 小时 |
| 文档格式多样 | HTML、PDF、Word 等格式需要人工转换 | 每次转换 10-30 分钟 |
| 代码走查困难 | 需要本地克隆代码,手动定位关键文件 | 每次走查 1-2 小时 |
| 报告格式不统一 | 不同人输出的报告格式不一致 | 沟通成本高 |
| 知识难以沉淀 | 测试经验无法复用 | 重复劳动 |
1.3 解决思路
目标: 将测试工作流自动化,减少人工干预,提高效率。
核心理念:
- 输入需求文档 → 自动输出测试报告
- 支持多种文档格式 → 自动识别和转换
- 代码走查自动化 → 远程访问 GitLab API
- 知识沉淀为 Skill → 可复用、可迭代
二、设计思路
2.1 整体架构
完整流程图
流程概览(简版)
三阶段演进路线图
2.2 核心设计决策
决策1:HTML 自动转换
问题: 语雀、Confluence 等工具导出的 HTML 包含大量样式和脚本,无法直接分析。
方案: 使用浏览器渲染引擎提取内容。
# 核心思路
1. 使用 browser_navigate 打开本地 HTML 文件
2. 使用 browser_console 执行 JavaScript 提取内容
3. 通过 CSS 选择器定位主体内容(article、main 等)
4. 清理格式,保存为 Markdown
优势:
- 保留原始渲染效果
- 支持富文本内容(表格、列表、代码块)
- 无需安装额外依赖
决策2:GitLab API 直接调用
问题: GitLab MCP 工具依赖 MCP 服务器运行,不够稳定。
方案: 使用 curl 直接调用 GitLab REST API。
# 从配置文件读取连接信息
API_URL="http://gitlab.example.com/api/v4"
TOKEN="***"# 搜索项目
curl -s -H "PRIVATE-TOKEN: $TOKEN" "$API_URL/projects?search=关键词"# 读取文件内容
curl -s -H "PRIVATE-TOKEN: $TOKEN" "$API_URL/projects/:id/repository/files/:path/raw?ref=分支"
优势:
- curl 是系统自带工具,无需额外依赖
- GitLab REST API 功能完整
- 不依赖 MCP 服务器状态
决策3:Skill 知识沉淀
问题: 测试经验无法复用,每次都需要重新学习。
方案: 将工作流封装为 Hermes Skill。
# Skill 结构
name: testops-7step-workflow
description: AI驱动的7步全链路测试工作流
triggers:- 测试工作流- testops- 7步测试
category: software-development
优势:
- 知识可复用
- 支持迭代优化
- 跨会话持久化
2.3 技术实现
文档预处理模块
def preprocess_documents(input_files):"""预处理所有输入文档"""processed_files = []for file_path in input_files:file_ext = os.path.splitext(file_path)[1].lower()if file_ext in ['.html', '.htm']:# HTML 文件:自动转换md_path = html_to_markdown_via_browser(file_path)processed_files.append(md_path)else:# 其他格式:直接使用processed_files.append(file_path)return processed_files
代码走查模块
def code_review_via_gitlab(project_id, branch, keywords):"""通过 GitLab API 进行代码走查"""# 1. 搜索相关代码for keyword in keywords:result = terminal(f"""curl -s -H 'PRIVATE-TOKEN: {token}' \'{api_url}/projects/{project_id}/search?scope=blobs&search={keyword}&ref={branch}'""")# 2. 读取关键文件for file_path in key_files:content = terminal(f"""curl -s -H 'PRIVATE-TOKEN: {token}' \'{api_url}/projects/{project_id}/repository/files/{encoded_path}/raw?ref={branch}'""")# 3. 生成走查报告return generate_review_report(findings)
测试报告生成模块
def generate_test_report(requirements, test_points, test_cases, code_review):"""生成完整的测试报告"""report = f"""
# AI TestOps 测试报告## 📋 测试概览
- **项目:** {project_name}
- **测试日期:** {date}
- **测试用例数:** {len(test_cases)}## 📊 统计摘要
| 指标 | 数值 |
|------|------|
| 需求覆盖率 | {coverage}% |
| P0用例数 | {p0_count} |
| 严重问题数 | {critical_count} |## 📝 详细报告
...
"""return report
三、成果价值
3.1 效率提升
| 指标 | 手工方式 | 自动化方式 | 提升 |
|---|---|---|---|
| 需求分析 | 2-4 小时 | 10-15 分钟 | 90% |
| 测试点拆解 | 1-2 小时 | 5-10 分钟 | 90% |
| 测试用例生成 | 2-3 小时 | 10-20 分钟 | 85% |
| 代码走查 | 1-2 小时 | 15-30 分钟 | 75% |
| 报告生成 | 30-60 分钟 | 5-10 分钟 | 85% |
| 总计 | 6-12 小时 | 45-85 分钟 | 85% |
3.2 质量提升
标准化
- 统一的测试报告格式
- 标准化的测试点分类(P0/P1/P2/P3)
- 规范的测试用例结构
完整性
- 自动覆盖所有需求点
- 系统性的测试点拆解
- 完整的代码走查维度
可追溯性
- 测试用例关联到具体需求
- 代码走查关联到具体功能
- 完整的审计轨迹
3.3 知识沉淀
Skill 复用
- 测试工作流封装为可复用的 Skill
- 支持跨项目、跨团队使用
- 持续迭代优化
经验积累
- 代码走查的最佳实践
- 测试点拆解的方法论
- 常见问题的处理模式
3.4 实际案例
案例:3029-闪购搜索词输入页运营模块
输入:
- 需求文档:闪购搜索词输入页运营模块需求设计.html
- 设计规格:设计规格-3029-闪购搜索词输入页运营模块.html
- 代码分支:uat
输出:
- 测试报告:AI-TestOps-测试报告.md
- 代码走查报告:代码走查报告.md
- 测试用例:18 个(P0:6, P1:5, P2:4, P3:3)
- 需求覆盖率:100%
- 代码符合度:72%
关键发现:
- 排序公式简化实现,未达到 V2 方案要求
- 业务过滤规则不完整
- Redis 缓存设计符合需求
改进建议:
- 优化排序公式,实现指数形式
- 补充完整的过滤规则
- 实现换一批去重逻辑
四、产品演进路线
4.1 演进策略:三步走
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Phase 1 │ → │ Phase 2 │ → │ Phase 3 │
│ Skill │ │ Platform │ │ RAG │
│ 工具化 │ │ 平台化 │ │ 智能化 │
└─────────────┘ └─────────────┘ └─────────────┘当前 6个月 12个月
4.2 Phase 1:Skill 工具化(当前阶段)
目标: 将测试工作流封装为可复用的 Skill,快速验证价值。
成果:
- ✅ 7步全链路测试工作流
- ✅ HTML 自动转换
- ✅ GitLab API 代码走查
- ✅ 测试报告自动生成
价值:
- 效率提升 85%
- 知识可复用
- 快速迭代优化
局限:
- 依赖 AI Agent 执行
- 无法团队协作
- 无数据积累
实际案例:
AI-TestOps-测试报告.md
服务端代码走查报告.md
客户端代码走查报告-3029闪购搜索运营模块.md
4.3 Phase 2:Platform 平台化(6个月)
目标: 将 Skill 转化为独立平台,支持团队协作。
4.3.1 平台架构
┌─────────────────────────────────────────────────────────────┐
│ AI TestOps Platform │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Web UI │ │ API 服务 │ │ 定时任务 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 文档解析 │ │ 测试分析 │ │ 代码走查 │ │
│ │ 引擎 │ │ 引擎 │ │ 引擎 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ MinIO/OSS │ │
│ │ 业务数据 │ │ 缓存 │ │ 文件存储 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
4.3.2 核心功能
| 功能模块 | 说明 | 技术栈 |
|---|---|---|
| 文档管理 | 上传、解析、存储各类文档 | FastAPI + PostgreSQL |
| 测试工作流 | 7步自动化流程 | Celery + Redis |
| 代码走查 | GitLab API 集成 | httpx + GitLab REST API |
| 报告管理 | 生成、存储、分享报告 | Jinja2 + MinIO |
| 团队协作 | 多人协作、权限管理 | RBAC + JWT |
4.3.3 关键特性
1. 任务队列化
# 异步执行测试工作流
@app.post("/api/v1/tasks")
async def create_task(request: TaskRequest):task = celery_app.send_task('testops.run_workflow',args=[request.doc_path, request.branch])return {"task_id": task.id}
2. 结果持久化
# 存储测试结果到数据库
class TestResult(BaseModel):task_id: strproject: strbranch: strtest_cases: List[TestCase]coverage: CoverageReportcreated_at: datetime
3. 团队协作
- 多人同时执行测试任务
- 测试结果共享和评论
- 权限管理和审计日志
4.4 Phase 3:RAG 智能化(12个月)
目标: 引入 RAG(检索增强生成),实现智能化测试分析。
4.4.1 RAG 架构
┌─────────────────────────────────────────────────────────────┐
│ RAG 智能测试系统 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 用户查询 │ ───────→ │ Embedding │ │
│ └─────────────┘ └─────────────┘ │
│ ↓ │
│ ┌─────────────┐ │
│ │ 向量数据库 │ │
│ │ (Milvus) │ │
│ └─────────────┘ │
│ ↓ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ LLM 生成 │ ←─────── │ 检索 TopK │ │
│ └─────────────┘ └─────────────┘ │
│ ↓ │
│ ┌─────────────┐ │
│ │ 智能回答 │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
4.4.2 知识沉淀
向量数据库内容:
| 数据类型 | 来源 | 用途 |
|---|---|---|
| 需求文档 | PRD、设计文档 | 需求分析参考 |
| 测试用例 | 历史测试用例 | 测试点推荐 |
| 代码片段 | GitLab 代码库 | 代码走查参考 |
| 缺陷记录 | Jira/Bug 系统 | 风险预测 |
| 测试报告 | 历史测试报告 | 趋势分析 |
Embedding 策略:
# 文档分块和 Embedding
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings# 1. 文档分块
splitter = RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200
)
chunks = splitter.split_documents(documents)# 2. 生成 Embedding
embeddings = OpenAIEmbeddings()
vectors = embeddings.embed_documents([chunk.page_content for chunk in chunks])# 3. 存储到向量数据库
milvus_client.insert(collection_name="test_knowledge",data=vectors
)
4.4.3 智能功能
1. 智能测试点推荐
# 基于历史相似需求推荐测试点
def recommend_test_points(requirement_doc):# 1. 检索相似需求similar_docs = vector_db.search(query=requirement_doc,top_k=5,filter={"type": "requirement"})# 2. 获取关联测试用例test_cases = []for doc in similar_docs:cases = vector_db.search(query=doc.content,filter={"type": "test_case"})test_cases.extend(cases)# 3. LLM 总结推荐recommendation = llm.generate(f"""基于以下历史测试用例,为新需求推荐测试点:新需求:{requirement_doc}历史测试用例:{test_cases}""")return recommendation
2. 风险预测
# 基于历史缺陷预测高风险模块
def predict_risk_modules(code_changes):# 1. 检索历史缺陷historical_bugs = vector_db.search(query=code_changes,filter={"type": "bug"})# 2. 分析缺陷模式risk_patterns = analyze_bug_patterns(historical_bugs)# 3. 预测风险等级risk_score = calculate_risk_score(code_changes, risk_patterns)return risk_score
3. 智能问答
# 基于 RAG 的智能问答
def answer_question(question):# 1. 检索相关知识relevant_docs = vector_db.search(query=question,top_k=5)# 2. LLM 生成回答answer = llm.generate(f"""基于以下知识,回答用户问题:用户问题:{question}相关知识:{relevant_docs}""")return answer
4.4.4 数据闭环
┌─────────────────────────────────────────────────────────────┐
│ 数据闭环 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 文档输入 → 测试分析 → 代码走查 → 测试报告 → 知识沉淀 │
│ ↑ │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ 每次测试都会积累知识,系统越来越智能 │
│ │
└─────────────────────────────────────────────────────────────┘
4.5 技术选型
| 层次 | 技术 | 说明 |
|---|---|---|
| 前端 | React + Ant Design | Web UI |
| 后端 | FastAPI + Celery | API + 任务队列 |
| 数据库 | PostgreSQL | 业务数据 |
| 缓存 | Redis | 会话、任务状态 |
| 向量数据库 | Milvus / Pinecone | 知识存储 |
| Embedding | OpenAI / BGE-M3 | 文本向量化 |
| LLM | GPT-4 / Claude | 智能生成 |
| 文件存储 | MinIO / OSS | 文档存储 |
| 部署 | Docker + K8s | 容器化部署 |
4.6 实施计划
| 阶段 | 时间 | 目标 | 关键里程碑 |
|---|---|---|---|
| Phase 1 | 当前 | Skill 工具化 | ✅ 7步工作流完成 |
| Phase 2 | Q3 2026 | 平台 MVP | Web UI + API + 任务队列 |
| Phase 2.5 | Q4 2026 | 平台完善 | 团队协作 + 报告管理 |
| Phase 3 | Q1 2027 | RAG 基础 | 向量数据库 + 基础检索 |
| Phase 3.5 | Q2 2027 | RAG 智能化 | 智能推荐 + 风险预测 |
五、总结
AI TestOps 7步全链路测试工作流是一个从实践中来、到实践中去的效率工具。
核心价值
- 效率提升 85%:将 6-12 小时的工作压缩到 45-85 分钟
- 质量标准化:统一的报告格式、测试点分类、用例结构
- 知识可复用:封装为 Skill,支持跨项目使用
- 持续迭代:基于实际使用不断优化
关键设计
- HTML 自动转换:使用浏览器渲染提取内容,无需人工干预
- GitLab API 直接调用:使用 curl 调用 REST API,稳定可靠
- Skill 知识沉淀:将经验封装为可复用的 Skill
适用场景
- 需求测试分析
- 代码走查
- 测试报告生成
- 回归测试分析