Agent+MCP+SKills 实战 性能测试·接口自动化·UI自动化·测试用例生成
🎯 系统概述
系统定位
北京慧测·杭州但问智能测试管理系统是一个基于 LangChain 和 大语言模型 的企业级测试自动化平台,通过多个专业智能体实现测试全流程的智能化。
核心价值
● 全栈覆盖: API、性能、UI 测试、测试用例、缺陷分析全覆盖
● 智能生成: 基于需求和 Schema 自动生成测试
● 自动修复: 智能诊断并修复失败的测试
● 多框架支持: Playwright、Jest、Artillery.io、Postman
🔧 核心技术栈
后端技术栈
前端/Node.js 技术栈
技术栈详细清单
🏗️ 智能体架构
架构设计模式
核心设计原则
1. 技能化架构 (Skills-Based Architecture)
每个智能体由多个可复用技能组成:
# API 智能体技能结构
api/
├── agent_skills/
│ └── skills/
│ ├── planner/# 测试规划技能
│ │ └── SKILL.md
│ ├── generator/# 代码生成技能
│ │ └── SKILL.md
│ └── healer/# 测试修复技能
│ └── SKILL.md
2. MCP 协议集成
使用 Model Context Protocol 实现工具与智能体的标准化通信:
# MCP 客户端配置
client = MultiServerMCPClient({
"ui": {
"transport": "stdio",
"command": "npx",
"args": ["playwright"]
},
"perf": {
"transport": "stdio",
"command": "node",
"args": ["./artillery-mcp-server.js"]
}
})
3. 虚拟文件系统后端
使用 FilesystemBackend 实现工作空间隔离:
workspace_backend = FilesystemBackend(
root_dir=workspace_root,
virtual_mode=True # 虚拟模式,不直接操作文件系统
)
🤖 四大核心智能体
1️⃣ API 测试智能体
文件位置: backend/app/agents/api/agent.py
核心能力
三大核心技能
Planner - API 测试规划
功能: 从 Schema 生成全面测试计划 输入: - OpenAPI 3.0 / Swagger 2.0 / GraphQL SDL - 本地文件路径或远程 URL 输出: - 功能测试场景 - 安全测试场景 - 边界测试场景 - 真实测试样本数据 - 可选的端点验证结果
特色功能:
支持的 50+ 字段模式:
Generator - API 测试代码生成
功能: 自动生成可执行测试代码
支持框架:
- Playwright Tests
- Jest Tests
- Postman Collections
工作流程:
1. api_project_setup (检测项目框架)
2. 提取测试计划章节
3. api_generator (生成代码)
4. 验证生成的测试
5. 手动优化 (可选)
生成示例:
// Playwright API 测试示例
import { test, expect } from '@playwright/test';
test.describe('User API Tests', () => {
test('should create user with valid data', async ({ request }) => {
const response = await request.post('/api/users', {
data: {
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@example.com',
password: 'SecurePass123!'
}
});
expect(response.status()).toBe(201);
const body = await response.json();
expect(body).toHaveProperty('id');
expect(body.email).toBe('john.doe@example.com');
});
});
Healer - API 测试修复
功能: 自动诊断并修复失败的 API 测试
5 种修复策略:
1. schema-update: Schema 变更更新
2. endpoint-fix: 端点 URL 修复
3. auth-repair: 认证问题修复
4. data-correction: 测试数据修正
5. assertion-update: 断言更新
诊断能力:
- 错误消息分析
- 响应结构对比
- 网络问题诊断
- Schema 一致性检查
工作流程
2️⃣ 性能测试智能体
文件位置: backend/app/agents/perf/agent.py
核心能力
Artillery.io 配置生成
# 自动生成的 Artillery 配置示例
config:
target: "https://api.example.com"
phases:
- duration: 60
arrivalRate: 10 # warm-up
name: "Warm up"
- duration: 300
arrivalRate: 50 # normal load
name: "Sustained load"
- duration: 120
arrivalRate: 100 # peak load
name: "Peak spike"
- duration: 60
arrivalRate: 5 # cool-down
name: "Cool down"
scenarios:
- name: "User Journey"
flow:
- get:
url: "/api/products"
- think: 2 # 用户思考时间
- post:
url: "/api/cart"
json:
productId: "{{ $randomString() }}"
quantity: 2
性能报告
关键指标
3️⃣ UI 测试智能体
文件位置: backend/app/agents/ui/agent.py
核心能力
三大核心技能
Planner - UI 测试规划
功能: 分析 Web 应用并创建测试计划
工具:
- planner_setup_page: 初始化浏览器页面
- browser_click: 点击元素
- browser_type: 输入文本
- browser_snapshot: 捕获页面快照
输出:
- 用户流程分析
- 测试场景设计
- 选择器策略建议
Generator - UI 测试生成
功能: 生成可靠的 Playwright 测试代码
工作流程:
1. generator_setup_page (初始化页面)
2. 执行测试步骤 (实时浏览器操作)
3. generator_read_log (读取操作日志)
4. generator_write_test (生成测试代码)
选择器策略 (优先级):
1. data-testid (最稳定)
2. role-based (role, name)
3. aria-label
4. CSS Selector
5. XPath (最后选择)
生成的 Playwright 测试示例:
import { test, expect } from '@playwright/test'; test.describe('Login Flow', () => { test('user can login with valid credentials', async ({ page }) => { // Navigate to login page await page.goto('/login'); // Fill login form await page.fill('[data-testid="email-input"]', 'user@example.com'); await page.fill('[data-testid="password-input"]', 'SecurePass123!'); // Click login button await page.click('[data-testid="login-button"]'); // Verify successful login await expect(page).toHaveURL('/dashboard'); await expect(page.locator('[data-testid="welcome-message"]')).toBeVisible(); }); });
Healer - UI 测试修复
功能: 修复失败的 Playwright 测试 诊断能力: - 错误消息分析 - 页面快照对比 - 网络请求检查 - 选择器验证 修复策略: - 更新过时的选择器 - 优化等待策略 - 修复时序问题 - 调整断言条件
Playwright MCP 工具集
4️⃣ 测试用例生成智能体
文件位置: backend/app/agents/testcase/agent.py
核心能力
支持的测试用例格式
传统测试用例格式
{
"name": "用户使用正确凭据登录成功",
"description": "验证用户使用正确的用户名和密码能够成功登录系统",
"preconditions": "用户已注册且账号状态正常",
"priority": "critical",
"case_type": "functional",
"test_case_steps": [
{
"step": "打开登录页面",
"result": "页面正常显示登录表单"
},
{
"step": "输入正确的用户名和密码",
"result": "输入框接受输入"
},
{
"step": "点击登录按钮",
"result": "成功登录并跳转到首页"
}
]
}
BDD (行为驱动开发) 格式
{
"name": "用户登录场景",
"template": "test_case_bdd",
"feature": "用户认证",
"scenario": "用户使用正确的凭据登录",
"background": "Given 用户已注册\nAnd 用户账号状态正常",
"priority": "high",
"case_type": "acceptance"
}
动态上下文配置
@dataclass
class TestCaseGeneratorContext:
"""测试用例生成器上下文"""
project_identifier: str = "" # 项目标识符
folder_id: str = "" # 文件夹 ID
current_user_id: str = "..." # 当前用户 ID
template_type: str = "test_case" # 默认模板类型
PDF 文档解析
PDF 处理器:
- PyPDF2: 基础 PDF 文本提取
- langchain-community: 高级 PDF 解析
- 自研多模态提取组件: 表格和图片提取
工作流程:
1. 接收 PDF 文件
2. 提取文本内容
3. 分析需求文档
4. 识别功能点
5. 生成测试用例
优先级分类
|
优先级 |
说明 |
适用场景 |
|
critical |
关键功能 |
核心业务流程、安全相关 |
|
high |
高优先级 |
重要功能、影响用户体验 |
|
medium |
中等优先级 |
常规功能 (默认) |
|
low |
低优先级 |
次要功能、边缘场景 |
测试类型
支持类型:
- functional: 功能测试
- regression: 回归测试
- smoke_sanity: 冒烟测试
- acceptance: 验收测试
- performance: 性能测试
- security: 安全测试
- usability: 可用性测试
- compatibility: 兼容性测试
- accessibility: 可访问性测试
- destructive: 破坏性测试
🔬 技术实现细节
MCP (Model Context Protocol) 集成
什么是 MCP?
MCP 是一个标准化协议,用于 AI 智能体与工具之间的通信。
MCP 配置示例
# UI 测试智能体 MCP 配置
client = MultiServerMCPClient({
"ui": {
"transport": "stdio",
"command": r"npx",
"args": ["playwright"]
}
})
async with client.session("ui") as session:
tools = await load_mcp_tools(session)
agent = create_agent(
model=model,
tools=tools,
system_prompt=SYSTEM_PROMPT
)
异步上下文管理器
@asynccontextmanager
async def make_agent() -> AsyncIterator[Pregel]:
"""
创建 agent 的工厂函数,使用 asynccontextmanager 保持 MCP session 存活。
优势:
- session 在 agent 生命周期内保持活跃
- 退出时自动清理资源
- 遵循 LangGraph API 最佳实践
"""
client = MultiServerMCPClient({...})
async with client.session("perf") as session:
tools = await load_mcp_tools(session)
agent = create_agent(...)
yield agent # session 会保持存活
动态 Prompt 系统
@dynamic_prompt
def dynamic_prompt_fn(request: ModelRequest) -> str:
"""动态生成测试用例系统提示词"""
context = request.runtime.context
return f"""系统提示词...
## 当前上下文信息
- 项目标识符: {context.project_identifier}
- 文件夹 ID: {context.folder_id}
- 模板类型: {context.template_type}
...
"""
文件系统后端
# 技能库后端 (只读,存储技能定义)
skills_backend = FilesystemBackend(
root_dir=skills_root,
virtual_mode=True# 虚拟模式
)
# 工作空间后端 (读写,存储测试产物)
workspace_backend = FilesystemBackend(
root_dir=workspace_root,
virtual_mode=True
)
中间件系统
# SkillsMiddleware - 加载技能定义
skills_middleware = SkillsMiddleware(
backend=skills_backend,
sources=["/skills/generator/","/skills/healer/","/skills/planner/"]
)
# 创建智能体时注入中间件
agent = create_agent(
model=model,
tools=tools,
middleware=[skills_middleware],
backend=workspace_backend
)
🔄 工作流程
API 测试完整工作流
性能测试工作流
UI 测试工作流
✅ 最佳实践
API 测试最佳实践
✅ DO:
• 使用 api_planner 一次生成完整测试计划
• 启用端点验证 (validateEndpoints: true)
• 选择合适的测试类别 (testCategories)
• 从上下文使用 apiBaseUrl
• 优先使用 schemaPath 而非 schemaUrl (本地文件)
❌ DON'T:
• 重复调用 api_planner (除非用户明确要求)
• 跳过 api_project_setup (生成器必需)
• 忽略验证失败的端点
• 假设所有 API 都无需认证
• 使用硬编码的项目参数
性能测试最佳实践
✅ DO:
• 从保守设置开始 (低 RPS, 短时长)
• 逐步增加负载找到系统极限
• 设置合理的 SLA 阈值
• 使用多阶段测试 (warm-up → load → cool-down)
• 生成增强 HTML 报告 (供干系人查看)
❌ DON'T:
• 直接在生产环境测试 (需授权)
• 使用过高的负载导致系统崩溃
• 忽略错误率分析
• 跳过 cool-down 阶段
• 假设性能目标 (需明确定义)
UI 测试最佳实践
✅ DO:
• 优先使用 data-testid 选择器
• 使用 waitForLoadState 而非 sleep
• 编写独立的测试 (可随机执行)
• 添加详细的步骤注释
• 使用正则表达式处理动态数据
❌ DON'T:
• 使用脆弱的 CSS/XPath 选择器
• 使用固定的等待时间
• 编写依赖性测试
• 忽略错误诊断
• 询问用户问题 (应自主决策)
测试用例生成最佳实践
✅ DO:
• 使用上下文参数 (project_identifier, folder_id)
• 设计全面的测试场景
• 设置合适的优先级
• 使用描述性的用例名称
• 批量创建相关用例
❌ DON'T:
• 忽略上下文参数
• 创建模糊的用例名称
• 遗漏前置条件
• 忽略边界条件
• 重复创建相同用例
📊 技术对比
🚀 快速开始
环境要求
Python: 3.13+
Node.js: 22+
PostgreSQL: 14+
MongoDB: 5+
安装依赖
# 后端依赖
cd backend
pip install -r requirements.txt
# 前端/UI MCP 依赖
cd ui
npm install
# 全局安装 Artillery
npm install -g artillery
配置环境变量
# .env 文件配置
DEEPSEEK_API_KEY=your_api_key
DATABASE_URL=postgresql+asyncpg://...
MONGODB_URL=mongodb://...
API_SKILLS_ROOT=./backend/app/agents/api/agent_skills
API_WORKSPACE_ROOT=./workspace/api
PERF_WORKSPACE_ROOT=./workspace/perf
UI_WORKSPACE_ROOT=./workspace/ui
启动服务
# 启动 FastAPI 后端
cd backend
uvicorn app.main:app --reload
# 启动前端 (如需要)
cd ui
npm run dev
🎓 学习资源
LLM 和智能体
● LangChain: https://docs.langchain.com/oss/python/langchain/overview
● LangGraph: https://docs.langchain.com/oss/python/langgraph/overview
● MCP 协议: https://modelcontextprotocol.io/
测试框架
● Playwright: https://playwright.dev/
● Jest: https://jestjs.io/
● Artillery: https://www.artillery.io/
API 规范
● OpenAPI 3.0: https://swagger.io/specification/
● GraphQL: https://graphql.org/learn/
📞 支持与反馈
官网: huicewang.com
文档版本: 2.0
最后更新: 2026-01-16
维护团队: 北京慧测·杭州但问智能技术团队
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐







所有评论(0)