🎯 系统概述

系统定位

北京慧测·杭州但问智能测试管理系统是一个基于 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 和智能体

 LangChainhttps://docs.langchain.com/oss/python/langchain/overview

 LangGraphhttps://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

维护团队: 北京慧测·杭州但问智能技术团队

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐