# 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/) --- **测试是质量的保证!** 🎯