Files
DP/tests/测试文档.md
zuowei1216 1b19ff1b92 20251222
2025-12-22 21:06:29 +08:00

427 lines
9.0 KiB
Markdown
Raw 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.
# DesignerCEP 测试文档
## 📋 测试概述
本测试套件包含完整的前后端测试,覆盖:
- **后端API测试** (Pytest)
- **前端组件测试** (Vitest)
- **端到端集成测试** (E2E)
---
## 🎯 测试目标
### 后端测试覆盖
- ✅ 管理员配置API (功能/VIP/签到配置)
- ✅ 功能使用API (核心扣费逻辑)
- ✅ 签到API (签到/日历/历史)
- ✅ 用户资料API
- ✅ 统计API
### 前端测试覆盖
- ✅ HomePage组件
- ✅ Profile组件
- ✅ CheckIn组件
- ✅ 用户交互流程
### 集成测试覆盖
- ✅ 用户完整使用流程
- ✅ 管理员配置流程
- ✅ VIP功能测试
---
## 🚀 快速开始
### 1. 后端测试
#### 环境准备
```bash
cd tests/backend
pip install -r requirements.txt
```
#### 配置测试数据库
复制 `.env.example``.env` 并配置:
```env
TEST_DB_HOST=localhost
TEST_DB_USER=root
TEST_DB_PASSWORD=your_password
TEST_DB_NAME=designercep_test
TEST_API_URL=https://backend.aidg168.uk/api/v1
```
#### 运行测试
```bash
# Windows
run_tests.bat
# Linux/Mac
chmod +x run_tests.sh
./run_tests.sh
# 或直接运行pytest
pytest -v
```
#### 查看覆盖率报告
测试完成后,打开 `htmlcov/index.html` 查看代码覆盖率。
---
### 2. 前端测试
#### 环境准备
```bash
cd Designer
npm install
```
#### 配置Vitest
前端项目已配置 Vitest无需额外配置。
#### 运行测试
```bash
# 运行所有测试
npm run test
# 监听模式
npm run test:watch
# 生成覆盖率报告
npm run test:coverage
```
#### 单独运行某个测试文件
```bash
npx vitest tests/frontend/HomePage.test.ts
```
---
### 3. 集成测试
#### 运行E2E测试
```bash
cd tests/integration
python e2e_test.py
```
**注意**: 集成测试需要:
1. 后端服务正常运行
2. 数据库已完成迁移
3. 测试用户已创建
---
## 📊 测试文件结构
```
tests/
├── backend/ # 后端测试
│ ├── conftest.py # Pytest配置和fixtures
│ ├── test_admin_config.py # 管理员配置测试
│ ├── test_feature.py # 功能使用测试
│ ├── test_checkin.py # 签到功能测试
│ ├── test_user_profile.py # 用户资料测试
│ ├── test_stats.py # 统计功能测试
│ ├── requirements.txt # Python依赖
│ └── run_tests.bat # Windows测试脚本
├── frontend/ # 前端测试
│ ├── HomePage.test.ts # 首页组件测试
│ ├── Profile.test.ts # 个人中心测试
│ └── CheckIn.test.ts # 签到页面测试
├── integration/ # 集成测试
│ └── e2e_test.py # 端到端测试
└── README.md # 测试说明文档
```
---
## 🧪 测试用例详解
### 后端测试
#### 1. 管理员配置测试 (`test_admin_config.py`)
```python
class TestFeaturesConfig:
- test_get_features_config() # 获取功能配置列表
- test_create_feature_config() # 创建新功能
- test_update_feature_config() # 更新功能配置
- test_delete_feature_config() # 删除功能配置
- test_update_nonexistent_feature() # 更新不存在的功能
class TestVIPConfig:
- test_get_vip_config() # 获取VIP配置
- test_update_vip_config() # 更新VIP配置
class TestCheckInConfig:
- test_get_checkin_config() # 获取签到配置
- test_create_checkin_config() # 创建签到档位
- test_update_checkin_config() # 更新签到档位
```
#### 2. 功能使用测试 (`test_feature.py`)
```python
class TestFeatureUsage:
- test_use_feature_normal_user() # 普通用户使用功能
- test_use_feature_insufficient_points() # 积分不足
- test_use_feature_vip_user_with_quota() # VIP用户使用配额
- test_use_disabled_feature() # 使用已禁用功能
- test_use_nonexistent_feature() # 不存在的功能
```
#### 3. 签到测试 (`test_checkin.py`)
```python
class TestDailyCheckIn:
- test_first_checkin() # 首次签到
- test_duplicate_checkin() # 重复签到
- test_consecutive_checkin_calculation() # 连续天数计算
- test_broken_consecutive_checkin() # 中断连续签到
- test_vip_multiplier() # VIP倍数
```
### 前端测试
#### 1. HomePage测试 (`HomePage.test.ts`)
```typescript
describe('HomePage', () => {
- it('应该正确渲染组件')
- it('应该显示欢迎信息')
- it('应该显示正确的积分数量')
- it('应该显示VIP状态')
- it('点击功能卡片应该调用使用功能API')
- it('积分不足时应该显示错误提示')
})
```
#### 2. Profile测试 (`Profile.test.ts`)
```typescript
describe('Profile', () => {
- it('应该显示用户基本信息')
- it('应该显示统计数据卡片')
- it('应该能够编辑资料')
- it('应该显示积分历史列表')
})
```
#### 3. CheckIn测试 (`CheckIn.test.ts`)
```typescript
describe('CheckIn', () => {
- it('应该显示签到状态')
- it('未签到时应该显示签到按钮')
- it('点击签到按钮应该调用签到API')
- it('应该显示签到日历')
- it('应该显示签到历史记录')
})
```
---
## 🔧 测试工具和技术
### 后端测试技术栈
- **Pytest**: Python测试框架
- **Requests**: HTTP客户端
- **PyMySQL**: 数据库连接
- **pytest-cov**: 代码覆盖率
- **pytest-html**: HTML测试报告
### 前端测试技术栈
- **Vitest**: Vue3测试框架
- **@vue/test-utils**: Vue组件测试工具
- **jsdom**: DOM环境模拟
---
## 📝 编写新测试
### 后端测试示例
```python
def test_your_api(test_user):
"""测试你的API"""
# 1. 准备数据
request_data = {
'username': test_user['username'],
'param': 'value'
}
# 2. 调用API
response = requests.post(
f"{API_BASE_URL}/your/endpoint",
json=request_data
)
# 3. 断言结果
assert response.status_code == 200
data = response.json()
assert data['code'] == 200
assert data['data']['field'] == expected_value
```
### 前端测试示例
```typescript
it('应该测试你的功能', async () => {
// 1. Mock API
;(axios.get as any).mockResolvedValue({
data: { code: 200, data: mockData }
})
// 2. 挂载组件
const wrapper = mount(YourComponent)
await new Promise(resolve => setTimeout(resolve, 100))
// 3. 断言
expect(wrapper.text()).toContain('期望文本')
})
```
---
## ⚠️ 注意事项
### 1. 测试数据隔离
- 后端测试使用独立的测试数据库
- 每个测试用例结束后自动回滚数据
- 测试用户名以 `test_` 开头
### 2. 异步操作
```python
# 后端:等待数据库更新
time.sleep(1)
# 前端:等待组件更新
await new Promise(resolve => setTimeout(resolve, 100))
```
### 3. 测试环境变量
确保测试环境不会影响生产数据:
```env
ENV=test
DB_NAME=designercep_test
API_URL=https://test.backend.aidg168.uk
```
### 4. Mock外部依赖
```typescript
// Mock axios
vi.mock('axios')
// Mock router
vi.mock('vue-router', () => ({
useRouter: () => mockRouter
}))
```
---
## 📈 测试覆盖率目标
| 模块 | 目标覆盖率 | 当前状态 |
|------|-----------|---------|
| 后端API | > 80% | ✅ 已达标 |
| 前端组件 | > 70% | ✅ 已达标 |
| 集成测试 | 核心流程全覆盖 | ✅ 已达标 |
---
## 🐛 问题排查
### 后端测试失败
**问题1**: 数据库连接失败
```
解决: 检查 .env 配置,确保测试数据库存在
```
**问题2**: API返回500错误
```
解决: 检查后端服务是否正常运行
```
### 前端测试失败
**问题1**: 组件挂载失败
```
解决: 检查是否正确Mock了所有依赖
```
**问题2**: 异步断言失败
```
解决: 增加等待时间或使用 waitFor()
```
---
## 📊 CI/CD集成
### GitHub Actions示例
```yaml
name: Tests
on: [push, pull_request]
jobs:
backend-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
- name: Install dependencies
run: |
cd tests/backend
pip install -r requirements.txt
- name: Run tests
run: pytest -v --cov
frontend-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
- name: Install dependencies
run: |
cd Designer
npm install
- name: Run tests
run: npm run test
```
---
## ✅ 测试检查清单
### 提交代码前
- [ ] 所有测试通过
- [ ] 新功能已添加测试
- [ ] 测试覆盖率达标
- [ ] 无eslint/pylint警告
### 发布前
- [ ] 运行完整测试套件
- [ ] 运行E2E集成测试
- [ ] 检查测试报告
- [ ] 验证关键流程
---
## 📚 参考资料
- [Pytest文档](https://docs.pytest.org/)
- [Vitest文档](https://vitest.dev/)
- [Vue Test Utils](https://test-utils.vuejs.org/)
- [Testing Best Practices](https://testingjavascript.com/)
---
**测试是质量的保证!** 🎯