# 测试策略

<cite>
**本文引用的文件**
- [README.md](file://README.md)
- [package.json](file://package.json)
- [server/src/app.ts](file://server/src/app.ts)
- [server/src/middleware/security.ts](file://server/src/middleware/security.ts)
- [server/src/modules/tts/tts.service.ts](file://server/src/modules/tts/tts.service.ts)
- [server/src/modules/auth/auth.service.ts](file://server/src/modules/auth/auth.service.ts)
- [test-all-apis.js](file://test-all-apis.js)
- [full-test.js](file://full-test.js)
- [simple-test.js](file://simple-test.js)
- [my-uniapp-vue3/package.json](file://my-uniapp-vue3/package.json)
</cite>

## 目录
1. [引言](#引言)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)

## 引言
本测试策略文档面向“AI有声书生成平台”，覆盖单元测试、集成测试、端到端测试、性能测试、安全测试与回归测试，并提供测试环境搭建、测试数据准备、测试报告生成与缺陷跟踪流程建议。目标是在保障质量的同时，提升交付效率与稳定性。

## 项目结构
项目采用前后端分离架构：
- 后端：Node.js + Koa，提供认证、TTS、音频管理、会员与支付等接口
- 前端：uniapp + Vue 3 + TypeScript，支持 H5 与多端小程序
- 测试：包含 Playwright 端到端脚本与简单的 HTTP API 测试脚本

```mermaid
graph TB
subgraph "前端"
FE_H5["H5 应用<br/>uniapp + Vue 3"]
FE_MP["小程序应用<br/>多端适配"]
end
subgraph "后端"
KOA["Koa 应用<br/>server/src/app.ts"]
MOD_AUTH["认证模块<br/>auth.service.ts"]
MOD_TTS["TTS 模块<br/>tts.service.ts"]
MWARE_SEC["安全中间件<br/>security.ts"]
end
subgraph "测试"
PW["Playwright 端到端<br/>full-test.js / simple-test.js"]
HTTP["HTTP API 测试<br/>test-all-apis.js"]
end
FE_H5 --> KOA
FE_MP --> KOA
PW --> KOA
HTTP --> KOA
KOA --> MOD_AUTH
KOA --> MOD_TTS
KOA --> MWARE_SEC
```

图表来源
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
- [server/src/modules/auth/auth.service.ts:1-115](file://server/src/modules/auth/auth.service.ts#L1-L115)
- [server/src/modules/tts/tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [full-test.js:1-145](file://full-test.js#L1-L145)
- [simple-test.js:1-93](file://simple-test.js#L1-L93)
- [test-all-apis.js:1-92](file://test-all-apis.js#L1-L92)

章节来源
- [README.md:1-168](file://README.md#L1-L168)
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
- [my-uniapp-vue3/package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65)

## 核心组件
- 认证模块：手机号验证码登录/注册、JWT签发与用户信息查询
- TTS模块：文本转音频、音色选择、分段与合并、云端/本地存储上传、LRC歌词生成
- 安全中间件：XSS过滤、SQL注入检测、敏感数据脱敏、CSP等安全响应头
- 应用入口：路由注册、静态资源挂载、健康检查、性能指标、队列与WebSocket初始化

章节来源
- [server/src/modules/auth/auth.service.ts:1-115](file://server/src/modules/auth/auth.service.ts#L1-L115)
- [server/src/modules/tts/tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715)
- [server/src/middleware/security.ts:1-154](file://server/src/middleware/security.ts#L1-L154)
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)

## 架构总览
后端通过中间件统一处理安全与性能，模块化提供业务能力；前端通过 Playwright 进行端到端验证，同时提供 HTTP 脚本进行 API 快速验证。

```mermaid
sequenceDiagram
participant FE as "前端应用"
participant KOA as "Koa 应用"
participant SEC as "安全中间件"
participant AUTH as "认证模块"
participant TTS as "TTS 模块"
FE->>KOA : "HTTP 请求"
KOA->>SEC : "中间件链 : 安全/日志/限流"
SEC-->>KOA : "校验通过"
KOA->>AUTH : "登录/用户信息"
AUTH-->>KOA : "JWT/用户信息"
KOA->>TTS : "文本转音频"
TTS-->>KOA : "音频URL/状态"
KOA-->>FE : "JSON 响应"
```

图表来源
- [server/src/app.ts:64-130](file://server/src/app.ts#L64-L130)
- [server/src/middleware/security.ts:6-27](file://server/src/middleware/security.ts#L6-L27)
- [server/src/modules/auth/auth.service.ts:44-97](file://server/src/modules/auth/auth.service.ts#L44-L97)
- [server/src/modules/tts/tts.service.ts:200-280](file://server/src/modules/tts/tts.service.ts#L200-L280)

## 详细组件分析

### 单元测试策略
- 覆盖率要求
  - 关键模块（认证、TTS）行覆盖率≥80%，分支覆盖率≥60%
  - 边界条件与异常路径（空输入、超长文本、速率限制、网络异常）必须覆盖
- 测试用例设计
  - 认证：验证码生成/校验、JWT签发、用户信息查询、免密登录开关
  - TTS：文本分段、音色映射、Provider切换、云端/本地上传、LRC生成、状态查询
  - 安全：XSS过滤、SQL注入检测、敏感数据脱敏
- Mock配置
  - 使用内存Map模拟验证码存储
  - 使用Mock Provider替代真实第三方TTS服务
  - 使用本地文件系统模拟存储上传
  - 使用Prisma Client Mock或测试数据库快照

章节来源
- [server/src/modules/auth/auth.service.ts:11-32](file://server/src/modules/auth/auth.service.ts#L11-L32)
- [server/src/modules/auth/auth.service.ts:35-41](file://server/src/modules/auth/auth.service.ts#L35-L41)
- [server/src/modules/auth/auth.service.ts:44-97](file://server/src/modules/auth/auth.service.ts#L44-L97)
- [server/src/modules/tts/tts.service.ts:98-158](file://server/src/modules/tts/tts.service.ts#L98-L158)
- [server/src/modules/tts/tts.service.ts:163-190](file://server/src/modules/tts/tts.service.ts#L163-L190)
- [server/src/modules/tts/tts.service.ts:326-339](file://server/src/modules/tts/tts.service.ts#L326-L339)
- [server/src/modules/tts/tts.service.ts:406-437](file://server/src/modules/tts/tts.service.ts#L406-L437)
- [server/src/modules/tts/tts.service.ts:547-597](file://server/src/modules/tts/tts.service.ts#L547-L597)
- [server/src/middleware/security.ts:6-27](file://server/src/middleware/security.ts#L6-L27)
- [server/src/middleware/security.ts:61-84](file://server/src/middleware/security.ts#L61-L84)
- [server/src/middleware/security.ts:105-133](file://server/src/middleware/security.ts#L105-L133)

### 集成测试策略
- API测试
  - 覆盖认证、TTS、音频管理、会员与支付等主要路由
  - 使用HTTP脚本对视频生成API进行快速验证
- 数据库测试
  - 使用测试数据库快照或事务回滚保证隔离
  - 验证Prisma写入/更新（AudioRecord、用户、书籍章节）一致性
- 第三方服务测试
  - Mock阿里云/MiniMax TTS Provider，验证降级逻辑
  - Mock存储服务，验证OSS/本地上传路径
  - WebSocket事件推送与失败标记文件

```mermaid
flowchart TD
Start(["开始集成测试"]) --> Setup["准备测试环境<br/>数据库快照/容器"]
Setup --> Mock["配置Mock Provider/存储"]
Mock --> AuthAPI["调用认证API<br/>登录/获取用户信息"]
AuthAPI --> TTSAPI["调用TTS生成API<br/>分段/合并/上传"]
TTSAPI --> DBCheck["校验数据库写入<br/>AudioRecord/章节状态"]
DBCheck --> StorageCheck["校验存储上传<br/>OSS/本地"]
StorageCheck --> WS["校验WebSocket事件"]
WS --> Report["生成测试报告"]
Report --> End(["结束"])
```

图表来源
- [test-all-apis.js:37-89](file://test-all-apis.js#L37-L89)
- [server/src/modules/tts/tts.service.ts:238-255](file://server/src/modules/tts/tts.service.ts#L238-L255)
- [server/src/modules/tts/tts.service.ts:406-437](file://server/src/modules/tts/tts.service.ts#L406-L437)
- [server/src/modules/tts/tts.service.ts:510-514](file://server/src/modules/tts/tts.service.ts#L510-L514)

章节来源
- [test-all-apis.js:1-92](file://test-all-apis.js#L1-L92)
- [server/src/modules/tts/tts.service.ts:238-255](file://server/src/modules/tts/tts.service.ts#L238-L255)
- [server/src/modules/tts/tts.service.ts:406-437](file://server/src/modules/tts/tts.service.ts#L406-L437)
- [server/src/modules/tts/tts.service.ts:510-514](file://server/src/modules/tts/tts.service.ts#L510-L514)

### 端到端测试策略
- 用户场景测试
  - 视频生成功能：列表页、创建页、步骤导航、生成按钮、API连通性
  - TTS生成预览：音色选择、参数调节、预览播放
- 跨平台兼容性测试
  - H5 与多端小程序页面一致性
  - 不同设备分辨率与交互行为
- 自动化与截图
  - Playwright驱动，失败自动截图便于定位

```mermaid
sequenceDiagram
participant Browser as "Playwright 浏览器"
participant Page as "页面"
participant API as "后端API"
participant Store as "存储服务"
Browser->>Page : "打开视频生成页面"
Page->>API : "GET /api/video/projects"
API-->>Page : "返回项目列表"
Page->>API : "POST /api/video/projects"
API->>Store : "上传/生成资源"
Store-->>API : "返回访问地址"
API-->>Page : "返回成功"
Page-->>Browser : "渲染结果/截图"
```

图表来源
- [full-test.js:14-119](file://full-test.js#L14-L119)
- [simple-test.js:20-69](file://simple-test.js#L20-L69)

章节来源
- [full-test.js:1-145](file://full-test.js#L1-L145)
- [simple-test.js:1-93](file://simple-test.js#L1-L93)

### 性能测试策略
- 负载测试
  - 使用压测工具对TTS生成接口施加并发请求，观察吞吐与延迟
  - 关注Provider切换、分段并发、合并与上传阶段的瓶颈
- 压力测试
  - 超长文本、高并发、弱网环境下的稳定性
- 内存泄漏检测
  - 长时间运行录制任务，监控进程内存增长
  - 关注分段生成与合并过程中的临时文件清理

章节来源
- [server/src/modules/tts/tts.service.ts:348-383](file://server/src/modules/tts/tts.service.ts#L348-L383)
- [server/src/modules/tts/tts.service.ts:406-437](file://server/src/modules/tts/tts.service.ts#L406-L437)

### 安全测试策略
- 输入验证
  - XSS过滤：对请求体与查询参数进行递归清洗
  - SQL注入检测：对查询与请求体进行模式匹配
- 权限控制
  - JWT校验与路由保护，避免未授权访问
- 数据加密
  - 敏感字段脱敏输出，避免泄露
  - 传输层建议启用HTTPS（当前中间件未强制）

章节来源
- [server/src/middleware/security.ts:6-27](file://server/src/middleware/security.ts#L6-L27)
- [server/src/middleware/security.ts:61-84](file://server/src/middleware/security.ts#L61-L84)
- [server/src/middleware/security.ts:105-133](file://server/src/middleware/security.ts#L105-L133)
- [server/src/app.ts:64-75](file://server/src/app.ts#L64-L75)

### 回归测试策略
- 自动化测试
  - 单元测试：每日构建触发
  - 集成测试：PR触发，覆盖核心API
  - 端到端测试：夜间运行，覆盖关键用户路径
- 持续集成测试
  - CI流水线中加入覆盖率统计与告警
  - 失败重试与失败截图归档

章节来源
- [package.json:1-9](file://package.json#L1-L9)
- [full-test.js:1-145](file://full-test.js#L1-L145)
- [simple-test.js:1-93](file://simple-test.js#L1-L93)

## 依赖分析
- 前端依赖：uni-app、Pinia、Vue 3、TypeScript
- 后端依赖：Koa、Prisma、Redis、OSS、FFmpeg（通过TTS与视频模块间接使用）
- 测试依赖：Playwright

```mermaid
graph LR
FE_PKG["前端依赖<br/>uni-app/Pinia/Vue3"] --> FE_APP["前端应用"]
BE_PKG["后端依赖<br/>Koa/Prisma/Redis/OSS"] --> BE_APP["后端应用"]
TEST_PKG["测试依赖<br/>Playwright"] --> TEST_RUN["测试运行"]
FE_APP --> BE_APP
TEST_RUN --> BE_APP
```

图表来源
- [my-uniapp-vue3/package.json:39-65](file://my-uniapp-vue3/package.json#L39-L65)
- [server/src/app.ts:10-25](file://server/src/app.ts#L10-L25)
- [package.json:3](file://package.json#L3)

章节来源
- [my-uniapp-vue3/package.json:1-65](file://my-uniapp-vue3/package.json#L1-L65)
- [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194)
- [package.json:1-9](file://package.json#L1-L9)

## 性能考虑
- TTS生成并发：根据Provider类型调整并发度，避免第三方限流
- 存储上传：优先本地合并后统一上传，失败时降级处理
- WebSocket事件：仅在章节级生成完成后推送，减少无效广播
- 健康检查与指标：暴露/health与/api/metrics，便于运维观测

章节来源
- [server/src/modules/tts/tts.service.ts:348-383](file://server/src/modules/tts/tts.service.ts#L348-L383)
- [server/src/modules/tts/tts.service.ts:406-437](file://server/src/modules/tts/tts.service.ts#L406-L437)
- [server/src/app.ts:92-97](file://server/src/app.ts#L92-L97)

## 故障排查指南
- 常见问题
  - 验证码失效：检查Map存储与过期时间
  - TTS Provider额度限制：自动切换至下一可用Provider
  - 上传失败：检查存储服务可用性与权限
  - WebSocket未推送：确认章节ID与回调执行
- 日志与监控
  - 后端日志与Sentry错误上报
  - TTS调试日志文件与状态查询接口
- 截图与报告
  - 端到端测试失败自动截图
  - API测试输出状态码与响应体

章节来源
- [server/src/modules/auth/auth.service.ts:11-32](file://server/src/modules/auth/auth.service.ts#L11-L32)
- [server/src/modules/tts/tts.service.ts:510-514](file://server/src/modules/tts/tts.service.ts#L510-L514)
- [server/src/modules/tts/tts.service.ts:547-597](file://server/src/modules/tts/tts.service.ts#L547-L597)
- [full-test.js:133-134](file://full-test.js#L133-L134)
- [test-all-apis.js:15-25](file://test-all-apis.js#L15-L25)

## 结论
通过分层测试策略与自动化流水线，可在保障质量的前提下加速交付。建议优先完善单元测试覆盖率与Mock配置，强化集成测试对核心业务链路的覆盖，并持续优化端到端测试与性能测试，确保平台在多端稳定运行。

## 附录
- 测试环境搭建
  - 后端：安装依赖、复制.env、启动服务
  - 前端：安装依赖、启动H5或编译小程序
  - 测试：安装Playwright，运行端到端脚本
- 测试数据准备
  - 使用测试数据库快照或种子数据
  - 准备Mock Provider凭据与存储配置
- 测试报告生成
  - 单元测试：覆盖率报告与失败用例
  - 集成测试：API响应与数据库一致性报告
  - 端到端测试：截图与控制台错误汇总
- 缺陷跟踪流程
  - 自动化测试失败即创建缺陷工单
  - 附带截图、日志与最小复现步骤

章节来源
- [README.md:56-90](file://README.md#L56-L90)
- [full-test.js:131-134](file://full-test.js#L131-L134)
- [simple-test.js:71-80](file://simple-test.js#L71-L80)