2026-01-13 11:27:21 +08:00

480 lines
12 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.

# 高血压风险评估系统 - 2天详细测试计划
**版本:** v1.0
**日期:** 2026-01-12
**测试人员:** 成员A云端、成员B边缘端
---
## 📅 Day 1组件测试日并行执行
### 09:30 - 10:00 | 启动会(两人一起)
**地点:** 会议室或线上会议
**参与:** 成员A、成员B、项目负责人
**议程:**
1. 明确测试范围(功能冒烟,不做性能与安全)
2. 对齐device_id规则
- 成员A用`test_edge_device_001`
- 成员B用`test_edge_device_002`
- 联调用:`edge_rk3588_001`
3. 确认日志输出目录:`artifacts/cloud/``artifacts/edge/`
4. 同步沟通方式(钉钉/微信群即时响应)
**产出:** 两人都清楚自己的任务清单
---
### 10:00 - 12:00 | 上午:组件冒烟(并行)
#### 成员A云端基础功能验证
**任务清单:**
**Task 1.1服务启动验证15分钟**
```bash
# 1. 启动云端
python cloud_hypertension_system.py
# 2. 检查输出
# 预期:
# ✓ 数据库初始化成功
# Running on http://127.0.0.1:5000
```
**记录:** 截图启动日志,保存为 `artifacts/cloud/startup.png`
---
**Task 1.2健康检查API10分钟**
```bash
# 在新终端运行
python scripts/check_health.py
```
**验收标准:**
- 返回状态码200
- 响应包含:`"status": "healthy"`
**记录:** 保存响应到 `artifacts/cloud/health.json`
---
**Task 1.3正常上传测试30分钟**
```bash
python scripts/test_upload.py
```
**验收标准:**
- 返回状态码200
- 响应包含:`"status": "success"`
- 云端控制台显示:`☁️ [API] 接收上传: 设备=test_edge_device_001`
**检查数据库:**
```bash
# 查看数据库是否有数据
sqlite3 cloud_database.db "SELECT COUNT(*) FROM sensor_data;"
# 应该返回3上传了3条事件
```
**记录:**
- 保存响应到 `artifacts/cloud/upload_response.json`
- 保存云端日志到 `artifacts/cloud/upload.log`
---
**Task 1.4报告生成测试30分钟**
```bash
python scripts/test_report.py
```
**验收标准:**
- 返回状态码200
- 生成报告文件:`./reports/report_test_edge_device_001_*.json`
- 报告包含基本统计(虽然数据很少)
**记录:**
- 复制生成的报告到 `artifacts/cloud/report_sample.json`
---
**Task 1.5数据库检查15分钟**
```bash
# 检查各表记录数
sqlite3 cloud_database.db <<EOF
SELECT 'devices:', COUNT(*) FROM devices;
SELECT 'sensor_data:', COUNT(*) FROM sensor_data;
SELECT 'nightly_summary:', COUNT(*) FROM nightly_summary;
EOF
```
**记录:** 保存查询结果到 `artifacts/cloud/db_check.txt`
---
#### 成员B边缘端基础功能验证
**任务清单:**
**Task 1.1本地运行测试45分钟**
```bash
# 启动边缘端(模拟模式)
python edge_hypertension_system.py > artifacts/edge/edge_45min.log 2>&1
# 让它运行45分钟观察输出
```
**验收标准每30秒检查一次**
- ✅ 心率输出在合理范围50-100 bpm
- ✅ 风险评分有数值0-1之间
- ✅ 无Python异常/崩溃
- ✅ 至少看到1次起夜事件🚽
**记录:**
- 截图正常输出3-5张
- 截图起夜事件
- 保存完整日志:`artifacts/edge/edge_45min.log`
---
**Task 1.2输出格式验证15分钟**
**检查输出是否包含:**
- 时间戳
- 生理指标心率、RMSSD、SDNN
- 风险评分与等级
- 系统性能(处理延迟)
**记录:**`Test-Log.md` 中记录样例输出
---
### 12:00 - 13:30 | 午休
---
### 13:30 - 15:30 | 下午:深入测试(并行)
#### 成员A云端异常场景与健壮性
**Task 2.1异常场景测试60分钟**
```bash
python scripts/test_negative.py
```
**测试场景:**
1. **401 Unauthorized错误API Key**
- 修改脚本中的API Key为错误值
- 预期返回401错误信息清晰
2. **400 Bad Request缺少字段**
- 使用 `test_data/sample_missing_field.json`
- 预期返回400指出缺少哪个字段
3. **400 Bad Request类型错误**
- 使用 `test_data/sample_wrong_type.json`
- 预期返回400指出类型不匹配
**记录:** 每个场景保存:
- 请求内容
- 响应状态码
- 错误信息
- 云端日志
保存到:`artifacts/cloud/negative_tests.md`
---
**Task 2.2重复上传测试30分钟**
**目标:** 验证重复上传的行为
```python
# 连续上传同一份数据3次
for i in range(3):
response = requests.post(...)
print(f"第{i+1}次上传:{response.status_code}")
```
**检查数据库:**
```bash
sqlite3 cloud_database.db "SELECT COUNT(*) FROM sensor_data WHERE device_id='test_edge_device_001';"
# 记录数量是3、9还是其他
```
**记录:**
- 重复上传行为(是幂等/累加/拒绝?)
- 如果不符合预期记录为Bug
---
#### 成员B边缘端容错与上传
**Task 2.1上传功能测试60分钟**
**前提:** 确保云端正在运行与成员A协调
**步骤:**
1. **修改边缘端配置,启用上传:**
```python
# edge_hypertension_system.py 第75行
'enable_upload': True,
'upload_url': 'http://127.0.0.1:5000/api/upload',
```
2. **运行边缘端,观察上传:**
```bash
python edge_hypertension_system.py
```
3. **每5分钟应该看到**
```
☁️ [Cloud Upload] Uploaded 24 events to cloud
✅ 上传成功!
```
**验收标准:**
- 至少成功上传2次10分钟内
- 云端控制台显示接收日志
**记录:**
- 边缘端上传日志
- 云端接收日志找成员A要
---
✅ **Task 2.2上传失败与重试30分钟**
**模拟场景1云端不可达**
1. **停止云端服务**找成员A协调
2. 观察边缘端输出:
```
☁️ [Cloud Upload] Failed: Connection refused
```
3. 边缘端应该继续本地处理(不崩溃)
**模拟场景2云端恢复**
1. **重新启动云端**
2. 观察边缘端下次上传是否成功
**记录:**
- 失败日志:`artifacts/edge/upload_fail.log`
- 恢复日志:`artifacts/edge/upload_recover.log`
---
### 15:30 - 16:30 | 交叉复核
**目标:** 避免"只在我电脑上能跑"的问题
**步骤:**
1. **成员A 在自己电脑上复现 成员B的操作**
- 运行边缘端10分钟
- 检查输出是否正常
2. **成员B 在自己电脑上复现 成员A的操作**
- 启动云端
- 运行 `test_upload.py`
- 检查是否成功
**记录:**
- 如果复现失败记录差异系统版本、Python版本、依赖版本
---
### 16:30 - 17:00 | Day 1总结
**两人一起填写:**
- Day 1完成情况哪些通过哪些失败
- 发现的问题清单
- Day 2重点关注点
---
## 📅 Day 2联调测试日协同执行
### 09:30 - 11:00 | 端到端闭环测试
**目标:** 验证完整链路:边缘端 → 云端 → 报告
**前提:**
- 两人在同一网络
- 或者都连接到云端服务器
**步骤:**
✅ **Step 1启动云端成员A**
```bash
python cloud_hypertension_system.py
```
✅ **Step 2配置边缘端成员B**
```python
# 修改 device_id 为联调专用
'device_id': 'edge_rk3588_001',
'upload_url': 'http://127.0.0.1:5000/api/upload', # 或成员A的IP
```
✅ **Step 3启动边缘端成员B**
```bash
python edge_hypertension_system.py
```
✅ **Step 4等待15分钟**
- 边缘端应该上传3次每5分钟一次
- 云端应该接收到数据
✅ **Step 5生成报告成员A**
```bash
python scripts/test_report.py
# 或直接访问API
# GET http://127.0.0.1:5000/api/report/edge_rk3588_001
```
✅ **Step 6验证结果**
- 报告包含15分钟的数据
- 数据量约72条记录15分钟 × 2次/分钟 × 240秒
**记录:**
- 边缘端日志:`artifacts/end2end/edge.log`
- 云端日志:`artifacts/end2end/cloud.log`
- 生成的报告:`artifacts/end2end/report.json`
- 数据库文件:`artifacts/end2end/cloud_database.db`
---
### 11:00 - 12:00 | 失败注入测试
**目标:** 验证系统容错与错误提示
✅ **Scenario 1错误API Key10分钟**
- 修改边缘端API Key为错误值
- 预期:边缘端显示"401 Unauthorized"
- 预期:边缘端继续本地处理
✅ **Scenario 2云端不可达15分钟**
- 停止云端
- 预期:边缘端显示连接失败,但不崩溃
- 重启云端
- 预期:边缘端恢复上传
✅ **Scenario 3数据格式错误15分钟**
- 手动修改上传数据,制造格式错误
- 预期云端返回400错误指出问题
- 预期:边缘端记录错误但不崩溃
**记录:** 每个场景的日志和截图
---
### 12:00 - 13:30 | 午休
---
### 13:30 - 15:00 | 整理交付物
**任务分工:**
**成员A整理云端产物**
- [ ] 收集所有日志文件到 `artifacts/cloud/`
- [ ] 导出数据库文件
- [ ] 整理API测试结果
- [ ] 填写 `Checklist-Cloud.md`
**成员B整理边缘端产物**
- [ ] 收集所有日志文件到 `artifacts/edge/`
- [ ] 整理运行截图
- [ ] 填写 `Checklist-Edge.md`
**两人一起:**
- [ ] 填写 `Test-Log.md`(完整时间线)
- [ ] 填写 `Bug-List.xlsx`(所有缺陷)
- [ ] 撰写 `2-day-summary.md`
---
### 15:00 - 16:00 | 测试总结会
**参与:** 成员A、成员B、项目负责人
**议程只回答3个问题**
1. **现在能否演示闭环?**
- 能 / 不能
- 如果不能,差哪一步?
2. **最大阻塞是什么?**
- 列出Top 3问题
- 每个问题的建议解决方案
3. **下一步传感器接入最先要修哪3个点**
- P0级问题优先
- 给出修复优先级
**产出:**
- 明确下一步行动计划
- 分配Bug修复责任人
---
## 📦 最终交付清单
**必须提交打包成test-results-YYYYMMDD.zip**
```
test-results-20260114/
├── Test-Log.md ← 完整测试记录
├── Bug-List.xlsx ← 缺陷清单P0/P1/P2分级
├── 2-day-summary.md ← 一页纸总结
├── Checklist-Cloud.md ← 云端检查表(已勾选)
├── Checklist-Edge.md ← 边缘端检查表(已勾选)
└── artifacts/ ← 所有测试产物
├── cloud/
│ ├── startup.png
│ ├── health.json
│ ├── upload_response.json
│ ├── report_sample.json
│ ├── negative_tests.md
│ ├── cloud_database.db ← 数据库快照
│ └── *.log ← 所有日志
├── edge/
│ ├── edge_45min.log
│ ├── upload_fail.log
│ ├── screenshots/ ← 截图目录
│ └── *.log
└── end2end/
├── edge.log
├── cloud.log
├── report.json
└── cloud_database.db
```
---
## 🎯 验收标准(项目负责人用)
| 编号 | 测试项 | 责任人 | 必须通过 | 证据文件 |
|-----|--------|--------|---------|---------|
| C1 | 云端服务启动 | A | ✅ | artifacts/cloud/startup.png |
| C2 | 健康检查API | A | ✅ | artifacts/cloud/health.json |
| C3 | upload→report闭环 | A | ✅ | artifacts/cloud/upload_response.json + report_sample.json |
| C4 | 错误码正确401/400 | A | ✅ | artifacts/cloud/negative_tests.md |
| C5 | 数据库落库正确 | A | ✅ | artifacts/cloud/db_check.txt |
| E1 | 边缘端45分钟无崩溃 | B | ✅ | artifacts/edge/edge_45min.log |
| E2 | 心率/风险评分正常 | B | ✅ | artifacts/edge/screenshots/ |
| E3 | 上传成功 | B | ✅ | artifacts/edge/*.log |
| E4 | 上传失败容错 | B | Nice | artifacts/edge/upload_fail.log |
| I1 | 端到端闭环成功 | A+B | ✅ | artifacts/end2end/* |
| I2 | 失败注入测试 | A+B | Nice | artifacts/end2end/failure_*.log |
**Must必须通过** C1-C5, E1-E3, I1
**Nice加分项** E4, I2
---
**测试愉快!有问题随时沟通。** 🚀