在上一章中,我们已经通过 Spec Coding 获得了一份专业的需求文档。现在是时候让 AI 架构师登场,为我们的智能测试平台设计一个可扩展、高性能的系统架构。
我使用了这样的提示词:
基于上一章生成的需求文档,请为智能测试平台设计完整的系统架构。需要包含:
- 整体架构图和技术栈选择
- 前后端分离的详细设计
- 数据库设计方案
- API 接口规范
- 部署架构建议
重点考虑:可扩展性、性能、安全性、开发效率
┌─────────────────────────────────────────────────────────────┐
│ 智能测试平台架构图 │
├─────────────────────────────────────────────────────────────┤
│ 前端层 (Frontend Layer) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ React 18 + TypeScript + Tailwind CSS │ │
│ │ ├── 用户认证模块 │ │
│ │ ├── 测试用例管理 │ │
│ │ ├── API 测试界面 │ │
│ │ ├── UI 自动化测试 │ │
│ │ ├── AI 聊天助手 │ │
│ │ └── 实时监控面板 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ HTTPS/WebSocket │
│ │ │
├─────────────────────────────────────────────────────────────┤
│ API 网关层 (API Gateway) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Nginx + 负载均衡 │ │
│ │ ├── SSL 终端 │ │
│ │ ├── 请求路由 │ │
│ │ ├── 限流控制 │ │
│ │ └── 静态资源服务 │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 应用服务层 (Application Layer) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ FastAPI + Python 3.11 │ │
│ │ ├── 认证服务 (JWT) │ │
│ │ ├── 测试管理服务 │ │
│ │ ├── API 测试引擎 │ │
│ │ ├── UI 测试引擎 (Playwright) │ │
│ │ ├── AI 服务 (LangChain) │ │
│ │ ├── 报告生成服务 │ │
│ │ └── WebSocket 服务 │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 任务队列层 (Task Queue Layer) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Celery + Redis │ │
│ │ ├── 异步测试执行 │ │
│ │ ├── 定时任务调度 │ │
│ │ ├── 报告生成任务 │ │
│ │ └── 通知推送任务 │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ 数据存储层 (Data Storage Layer) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ SQLite (开发) / PostgreSQL (生产) │ │
│ │ ├── 用户数据 │ │
│ │ ├── 测试用例数据 │ │
│ │ ├── 执行历史 │ │
│ │ └── 报告数据 │ │
│ └─────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Redis 缓存 │ │
│ │ ├── 会话存储 │ │
│ │ ├── 任务队列 │ │
│ │ └── 实时数据缓存 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
-- 用户管理表
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(255),
role VARCHAR(50) DEFAULT 'tester',
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 测试项目表
CREATE TABLE projects (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255) NOT NULL,
description TEXT,
owner_id INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 测试用例表
CREATE TABLE test_cases (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT,
steps TEXT,
expected_result TEXT,
priority VARCHAR(20) DEFAULT 'medium',
status VARCHAR(20) DEFAULT 'active',
project_id INTEGER REFERENCES projects(id),
created_by INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- API 测试表
CREATE TABLE api_tests (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255) NOT NULL,
method VARCHAR(10) NOT NULL,
url VARCHAR(500) NOT NULL,
headers TEXT, -- JSON 格式
body TEXT,
expected_status INTEGER,
expected_response TEXT,
project_id INTEGER REFERENCES projects(id),
created_by INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- UI 测试表
CREATE TABLE ui_tests (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255) NOT NULL,
script TEXT NOT NULL, -- Playwright 脚本
target_url VARCHAR(500),
browser VARCHAR(50) DEFAULT 'chromium',
project_id INTEGER REFERENCES projects(id),
created_by INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 测试执行历史表
CREATE TABLE test_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
test_type VARCHAR(20) NOT NULL, -- 'api', 'ui', 'manual'
test_id INTEGER NOT NULL,
status VARCHAR(20) NOT NULL, -- 'running', 'passed', 'failed'
result TEXT, -- JSON 格式的详细结果
duration INTEGER, -- 执行时间(毫秒)
executed_by INTEGER REFERENCES users(id),
executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 测试报告表
CREATE TABLE test_reports (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name VARCHAR(255) NOT NULL,
project_id INTEGER REFERENCES projects(id),
total_tests INTEGER DEFAULT 0,
passed_tests INTEGER DEFAULT 0,
failed_tests INTEGER DEFAULT 0,
report_data TEXT, -- JSON 格式
generated_by INTEGER REFERENCES users(id),
generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
# 用户注册
POST /api/auth/register
{
"email": "user@example.com",
"password": "password123",
"full_name": "Test User"
}
# 用户登录
POST /api/auth/login
{
"email": "user@example.com",
"password": "password123"
}
# 获取用户信息
GET /api/auth/me
Authorization: Bearer <token>
# 获取测试用例列表
GET /api/test-cases?project_id=1&page=1&limit=20
# 创建测试用例
POST /api/test-cases
{
"title": "登录功能测试",
"description": "验证用户登录功能",
"steps": "1. 输入用户名\n2. 输入密码\n3. 点击登录",
"expected_result": "成功登录到系统",
"priority": "high",
"project_id": 1
}
# 更新测试用例
PUT /api/test-cases/{id}
# 删除测试用例
DELETE /api/test-cases/{id}
# 执行 API 测试
POST /api/api-tests/execute
{
"method": "GET",
"url": "https://api.example.com/users",
"headers": {"Authorization": "Bearer token"},
"expected_status": 200
}
# 获取 API 测试历史
GET /api/api-tests/history?test_id=1
# 执行 UI 测试
POST /api/ui-tests/execute
{
"script": "await page.goto('https://example.com'); await page.click('#login');",
"browser": "chromium"
}
# 获取测试截图
GET /api/ui-tests/screenshot/{execution_id}
# docker-compose.dev.yml
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
volumes:
- ./frontend:/app
backend:
build: ./backend
ports:
- "8000:8000"
volumes:
- ./backend:/app
environment:
- DATABASE_URL=sqlite:///./test.db
- REDIS_URL=redis://redis:6379
redis:
image: redis:alpine
ports:
- "6379:6379"
celery:
build: ./backend
command: celery -A app.celery_app worker --loglevel=info
volumes:
- ./backend:/app
depends_on:
- redis
# docker-compose.prod.yml
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/ssl
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.prod
backend:
build:
context: ./backend
dockerfile: Dockerfile.prod
environment:
- DATABASE_URL=postgresql://user:pass@postgres:5432/testdb
- REDIS_URL=redis://redis:6379
postgres:
image: postgres:15
environment:
- POSTGRES_DB=testdb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:alpine
celery:
build:
context: ./backend
dockerfile: Dockerfile.prod
command: celery -A app.celery_app worker --loglevel=info
volumes:
postgres_data:
通过 Spec Coding,我们获得了一个专业的系统架构设计。AI 架构师不仅考虑了技术实现,还兼顾了性能、安全、可扩展性等多个维度。
在下一章中,我们将开始前端框架的搭建,看看 AI 如何帮助我们快速搭建现代化的 React 应用。
下期预告:第三章将展示如何使用 Kiro 快速搭建 React + TypeScript + Tailwind CSS 的前端项目,包括项目初始化、组件库配置、路由设计等内容。
讨论交流:欢迎在评论区分享你的想法和问题!