Files
ai-customer-service/test/STRATEGY.md
Your Name cf46b27610 fix: P0-1 RateLimiter并发写安全 + P0-2工单操作错误码区分 + P1 rows.Close修复
P0-1 (limits.go): Allow()方法改为全程使用写锁保护counters map读写,避免RLock写入时的data race
P0-2 (ticket_workflow.go+ticket_handler.go): Assign/Resolve/Close操作先查询ticket存在性和状态,返回明确的CS_TICKET_4001/CS_TKT_4002/CS_TICKET_4092/CS_TICKET_4093错误码,handler根据错误前缀路由HTTP状态码
P1-1 (ticket_store.go): 移除GetStats中3处手动rows.Close(),只保留defer Close()
2026-05-01 20:56:25 +08:00

3.0 KiB
Raw Permalink Blame History

AI-Customer-Service 测试策略

版本v1.0 | 状态:初稿


1. 测试目标

目标 指标 验证方式
功能正确性 所有 AC 通过率 100% 每个 AC 至少 1 正向 + 1 负向测试用例
性能达标 首次响应 <10s意图识别 <2s检索 <200ms 负载测试 + 峰值测试
安全性 无越权、无数据泄露、无审计缺失 渗透测试 + 审计追溯 + 红队测试
容灾能力 单机故障不影响服务LLM 故障时有兑底 混淆工程测试

2. 测试层级

├── 单元测试 (Unit Test)
│   ├── 渠道适配器解析/发送
│   ├── 意图识别逻辑
│   ├── 会话状态机
│   ├── 转人工判断逻辑
│   └── 权限控制逻辑
│
├── 集成测试 (Integration Test)
│   ├── 数据库交互(会话、消息、工单)
│   ├── Redis 缓存交互(上下文、频率限制)
│   ├── LLM Client Mock 测试
│   ├── 向量数据库检索测试
│   └── 外部只读 API Mock 测试
│
├── E2E 测试 (End-to-End Test)
│   ├── 多渠道消息流程
│   ├── 多轮对话与上下文保持
│   ├── 转人工整条链路
│   └── 运营后台流程
│
└── 安全测试 (Security Test)
    ├── Prompt Injection 防护
    ├── 越权访问
    ├── 数据隔离(跨用户查询)
    └── 红队模拟攻击

3. 测试工具

层级 工具 说明
单元测试 Go testing + testify + mockery 覆盖率门槛 domain ≥ 70%、service/handler ≥ 80%
数据库测试 testcontainers-go (PostgreSQL) 独立容器
缓存测试 miniredis
HTTP 测试 httptest + net/http
LLM Mock 自定义 Mock Server 模拟 OpenAI / 阿里云响应
E2E 测试 自定义 Go E2E 框架 启动完整服务
安全测试 自定义红队脚本 模拟 Prompt Injection 等攻击

4. 测试环境

环境 用途 数据
本地开发 单元 + 快速集成 测试数据生成
CI 自动化单元 + 集成 测试数据生成
测试环境 E2E + 性能 + 安全 模拟生产数据(脱敏)
生产前 灾备测试 生产数据副本
生产环境 灰度监控 真实数据

5. 测试数据管理

  • 知识库条目使用 test/fixtures/kb/ 下的 Markdown 文件管理。
  • 测试用例自洁,启动前加载固定数据集,结束后清理。
  • 多语言/多渠道测试数据分离管理。

6. 特殊测试要求

  • 意图识别测试:必须覆盖所有意图类别,特别是敏感意图(退款/封禁/安全)必须强制转人工。
  • 安全测试:必须模拟 Prompt Injection 、越权查询、跨用户数据访问等场景。
  • 性能测试:必须模拟 100 QPS 峰值场景下的系统表现。
  • 容灾测试:必须模拟主备 LLM 均故障时的兑底回复行为。