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()
80 lines
3.0 KiB
Markdown
80 lines
3.0 KiB
Markdown
# 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 均故障时的兑底回复行为。
|