# 心知益家小程序 - 自动化测试套件 ## 概述 本测试套件基于 Chrome DevTools MCP 服务,实现心知益家小程序的自动化测试,确保 100% 的需求覆盖度。 ## 特性 - ✅ **100% 需求覆盖**:自动解析需求文档,为每个需求生成测试用例 - 🔄 **自动同步**:需求变更时自动检测并同步测试用例 - 📊 **可视化报告**:生成 HTML 和 JSON 格式的测试报告 - 🎯 **优先级测试**:支持按 P0/P1/P2 优先级运行测试 - 📸 **截图记录**:测试过程自动截图,便于问题定位 ## 目录结构 ``` 系统测试/ ├── test-cases.js # 测试用例定义(100% 需求覆盖) ├── run-tests.js # 测试运行器 ├── package.json # 项目配置 ├── test-reports/ # 测试报告输出目录 │ ├── test-report-{timestamp}.html │ └── test-report-{timestamp}.json ├── screenshots/ # 测试截图目录 └── .test-sync.json # 需求同步状态文件 ``` ## 快速开始 ### 1. 安装依赖 ```bash cd 系统测试 npm install ``` ### 2. 运行测试 ```bash # 运行所有测试 npm test # 仅运行 P0 级测试 npm run test:p0 # 仅运行 P1 级测试 npm run test:p1 # 仅运行 P2 级测试 npm run test:p2 # 仅同步需求,不运行测试 npm run sync # 仅生成报告 npm run report ``` ### 3. 查看报告 测试完成后,在 `test-reports/` 目录查看 HTML 报告: ```bash # 打开最新报告 open test-reports/test-report-*.html ``` ## 需求覆盖 ### P0 级需求(必须完成) | 需求ID | 功能描述 | 测试状态 | |--------|----------|----------| | TASK-001 | 家长可创建任务,设置任务名称 | ✅ | | TASK-002 | 设置任务积分值(1-10分,默认2分) | ✅ | | TASK-003 | 设置任务截止时间(精确到分钟) | ✅ | | TASK-005 | 设置任务分类(学习类/生活类/运动类/游戏类/其他) | ✅ | | TASK-008 | 孩子可查看今日任务列表 | ✅ | | TASK-009 | 孩子点击"完成"按钮提交任务 | ✅ | | TASK-012A | 打卡支持照片上传 | ✅ | | TASK-012B | 打卡支持视频上传 | ✅ | | TASK-012C | 打卡支持录音上传 | ✅ | | TASK-012D | 打卡支持文字描述 | ✅ | | TASK-012E | 打卡支持倒计时功能 | ✅ | | TASK-012F | 倒计时结束时语音提醒 | ✅ | | POINT-001 | 完成任务获得基础积分 | ✅ | | POINT-002 | 超额完成获得额外积分(提前或超质完成,家长制定规则) | ✅ | | POINT-006 | 超时10分钟以内不算迟到 | ✅ | | POINT-007 | 每天最多扣5分 | ✅ | | POINT-008 | 扣分功能按年龄配置 | ✅ | | POINT-009 | 积分不清零,可设置积分有效期 | ✅ | | REWARD-001 | 孩子可添加想要的奖励到心愿单 | ✅ | | REWARD-001A | 家长填写所需积分后心愿进入奖励库 | ✅ | | REWARD-002A | 家庭奖励库(多个家长都可调整) | ✅ | | REWARD-002B | 多孩子心愿单隔离 | ✅ | | REWARD-005 | 家长审批奖励兑换 | ✅ | | MODE-001 | 家长模式:发布任务、审批奖励 | ✅ | | MODE-002 | 孩子模式:查看任务、完成任务 | ✅ | | MODE-003 | 密码切换模式(4位数字密码) | ✅ | | MODE-006 | 角色权限区分 | ✅ | | MODE-007 | 孩子信息管理(支持多孩) | ✅ | | MODE-008 | 孩子账号停用功能 | ✅ | | MODE-009 | 停用的孩子不可登录 | ✅ | | STREAK-001 | 首页显示连续完成任务天数 | ✅ | | STREAK-002 | 火苗图标+天数组合显示 | ✅ | | STREAK-003 | 连续打卡中断自动重置 | ✅ | | GUIDE-001 | 首次登录角色选择 | ✅ | | GUIDE-002 | 成长规划师信息录入(身份证、性别、照片、证书号) | ✅ | | GUIDE-003 | 成长规划师查看关联家庭列表 | ✅ | | GUIDE-004 | 成长规划师审核家庭任务 | ✅ | | GUIDE-006 | 分享码绑定家庭 | ✅ | | GUIDE-009 | 成长规划师调整家庭成员任务 | ✅ | ### P1 级需求(重要) - TASK-004 ~ TASK-007 - TASK-013 ~ TASK-015 - POINT-003 ~ POINT-004 - REWARD-003A ~ REWARD-007 - STREAK-004 - BADGE-001 ~ BADGE-006 - REPORT-001 ~ REPORT-004 - FOCUS-001 ~ FOCUS-008 - DAN-001 ~ DAN-015 - THEME-001 - GUIDE-005(批量审核)、GUIDE-007(发送咨询)、GUIDE-008(回复咨询)、GUIDE-010(删除任务) - GAME-001 ~ GAME-009(小游戏模块:舒尔特方格、猜数字、数独) - TEMPLATE-001 ~ TEMPLATE-004(任务模板管理) ### P2 级需求(一般) - TASK-006, TASK-016 - POINT-005 - REVIEW-006 ~ REVIEW-007 - REWARD-008 - MODE-005, MODE-010 - THEME-002 ~ THEME-006 - EXPORT-001 ~ EXPORT-003 - REPORT-005 - TEMPLATE-005(启用/禁用模板) ## 需求变更同步 当需求文档更新时,测试套件会自动检测变更: 1. **新增需求**:自动生成新的测试用例模板 2. **修改需求**:标记需要更新的测试用例 3. **删除需求**:标记对应的测试用例为过时 同步日志保存在 `.test-sync.json` 文件中。 ## 测试用例编写规范 ### 基类方法 ```javascript class BaseTestCase { // 初始化测试 async setup() // 截图 async screenshot(name) // 等待元素 async waitForElement(selector, timeout) // 点击元素 async click(uid) // 填充输入框 async fill(uid, value) // 获取页面快照 async getSnapshot() // 记录测试结果 logResult(passed, error) } ``` ### 示例测试用例 ```javascript class TASK_001_TestCase extends BaseTestCase { constructor() { super('TASK-001', '家长可创建任务,设置任务名称', 'P0'); } async run() { try { await this.setup(); // 1. 登录家长账号 const snapshot = await this.getSnapshot(); const createTaskBtn = snapshot.find(item => item.text.includes('创建任务')); // 2. 点击创建任务 await this.click(createTaskBtn.uid); await this.screenshot('create_task_page'); // 3. 输入任务名称 const nameInput = await this.waitForElement('任务名称'); await this.fill(nameInput.uid, '测试任务'); // 4. 验证任务创建成功 const result = await this.getSnapshot(); const taskExists = result.some(item => item.text.includes('测试任务')); this.logResult(taskExists); } catch (error) { this.logResult(false, error); } } } ``` ## Chrome DevTools MCP 集成 本测试套件使用以下 Chrome DevTools MCP 工具: - `chrome-devtools_new_page` - 打开新页面 - `chrome-devtools_navigate_page` - 导航到 URL - `chrome-devtools_take_snapshot` - 获取页面快照 - `chrome-devtools_click` - 点击元素 - `chrome-devtools_fill` - 填充输入框 - `chrome-devtools_take_screenshot` - 截图 - `chrome-devtools_wait_for` - 等待元素 - `chrome-devtools_upload_file` - 上传文件 ## 配置 编辑 `test-cases.js` 中的 `TEST_CONFIG` 对象: ```javascript const TEST_CONFIG = { baseUrl: 'http://localhost:8080', miniprogramUrl: 'http://localhost:8080/weapp', webAdminUrl: 'http://localhost:8080/admin', adminAccount: { phone: '13800000001', code: '123456' }, parentAccount: { phone: '13800000002', code: '123456' }, childAccount: { phone: '13800000003', code: '123456' }, timeout: 30000, screenshotPath: './screenshots' }; ``` ## 持续集成 将测试套件集成到 CI/CD 流程: ```yaml # .gitlab-ci.yml 或 GitHub Actions test: script: - cd 系统测试 - npm install - npm run test:p0 # 至少运行 P0 测试 artifacts: paths: - 系统测试/test-reports/ expire_in: 30 days ``` ## 维护指南 ### 添加新测试用例 1. 在 `test-cases.js` 中创建新的测试类 2. 继承 `BaseTestCase` 3. 实现 `run()` 方法 4. 在导出列表中添加新类 5. 在测试套件中注册 ### 更新测试用例 当需求变更时: 1. 运行 `npm run sync` 检测变更 2. 根据提示更新对应的测试用例 3. 运行测试验证更新 ## 故障排查 ### 常见问题 1. **无法连接到浏览器** - 确保 Chrome/Edge 浏览器已启动 - 检查 MCP 服务是否运行 2. **元素定位失败** - 检查页面是否加载完成 - 使用 `waitForElement` 增加等待时间 - 查看截图确认页面状态 3. **测试超时** - 增加 `TEST_CONFIG.timeout` 值 - 检查网络连接 - 查看后端服务日志 ## 许可证 MIT License ## 更新日志 ### V1.2.0 (2026-04-12) - ✅ 同步 TASK-005、POINT-002、POINT-009、REWARD-001A/002A/002B - ✅ DAN 模块调整为“测评记录模块”,同步 DAN-001 ~ DAN-015 - ✅ 更新需求同步元数据与测试覆盖说明 ### V1.0.0 (2026-04-09) - ✅ 初始版本 - ✅ 100% P0 需求覆盖 - ✅ 自动同步功能 - ✅ HTML/JSON 报告生成