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

80 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 均故障时的兑底回复行为。