mobile-eda/docs/PHASE4_E2E_TEST_PLAN.md

485 lines
14 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.

# Phase 4 端到端 (E2E) 测试计划
**阶段**: Week 11-12 - 端到端测试
**测试负责人**: 测试工程师
**更新日期**: 2026-03-07
**状态**: 🟡 进行中
---
## 📋 E2E 测试概述
端到端测试验证完整用户流程,确保从用户注册到项目分享的整个链路正常工作。
### 测试范围
1. **完整用户流程**: 注册 → 登录 → 创建项目 → 编辑 → 保存 → 分享
2. **边界条件**: 弱网/断网/低电量/存储不足
3. **崩溃率测试**: Crashlytics 集成与监控
4. **数据一致性**: 本地存储与云同步一致性
---
## 🔄 完整用户流程测试
### E2E-001: 新用户完整流程
**优先级**: P0
**预计耗时**: 15 分钟
**前置条件**:
- 未注册的新设备
- 网络连接正常
**测试步骤**:
| 步骤 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 打开应用 | 显示欢迎页面 | ⏳ |
| 2 | 点击"注册"按钮 | 进入注册页面 | ⏳ |
| 3 | 输入邮箱、密码、昵称 | 表单验证通过 | ⏳ |
| 4 | 点击"注册" | 注册成功,自动登录 | ⏳ |
| 5 | 进入首页 | 显示项目列表(空) | ⏳ |
| 6 | 点击"新建项目" | 弹出创建对话框 | ⏳ |
| 7 | 输入项目名称"我的第一个电路" | 名称验证通过 | ⏳ |
| 8 | 选择模板(空白/示例) | 模板预览显示 | ⏳ |
| 9 | 点击"创建" | 项目创建成功,进入编辑器 | ⏳ |
| 10 | 从元件库选择电阻 | 元件库展开,显示电阻 | ⏳ |
| 11 | 点击电阻,放置到画布 | 电阻出现在画布上 | ⏳ |
| 12 | 修改电阻属性(位号 R1, 值 10k | 属性面板更新 | ⏳ |
| 13 | 添加第二个元件(电容) | 电容放置成功 | ⏳ |
| 14 | 切换到走线模式 | 工具栏状态更新 | ⏳ |
| 15 | 连接两个元件引脚 | 连线绘制成功 | ⏳ |
| 16 | 点击"保存" | 保存成功提示 | ⏳ |
| 17 | 返回项目列表 | 项目显示在列表中 | ⏳ |
| 18 | 删除项目 | 确认删除,项目消失 | ⏳ |
| 19 | 点击"分享" | 分享菜单弹出 | ⏳ |
| 20 | 选择"导出为 JSON" | 文件导出成功 | ⏳ |
**验收标准**:
- [ ] 所有步骤顺利完成
- [ ] 无崩溃、无异常
- [ ] 数据持久化正确
- [ ] UI 响应流畅
---
### E2E-002: 老用户登录流程
**优先级**: P0
**预计耗时**: 10 分钟
**前置条件**:
- 已有注册账号
- 设备已卸载重装
**测试步骤**:
| 步骤 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 打开应用 | 显示登录页面 | ⏳ |
| 2 | 输入已注册邮箱 | 邮箱格式验证 | ⏳ |
| 3 | 输入密码 | 密码可见性切换 | ⏳ |
| 4 | 点击"登录" | 登录成功,进入首页 | ⏳ |
| 5 | 查看项目列表 | 显示历史项目 | ⏳ |
| 6 | 打开之前创建的项目 | 项目内容完整加载 | ⏳ |
| 7 | 验证元件和连线 | 与保存时一致 | ⏳ |
| 8 | 退出登录 | 返回登录页面 | ⏳ |
**验收标准**:
- [ ] 登录成功
- [ ] 云同步数据完整
- [ ] 退出登录正常
---
### E2E-003: 项目编辑完整流程
**优先级**: P0
**预计耗时**: 20 分钟
**前置条件**:
- 已登录
- 已有测试项目
**测试步骤**:
| 步骤 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 打开项目 | 编辑器加载成功 | ⏳ |
| 2 | 添加 10 个电阻 | 所有电阻显示正常 | ⏳ |
| 3 | 添加 10 个电容 | 所有电容显示正常 | ⏳ |
| 4 | 添加 5 个 IC | IC 引脚显示正确 | ⏳ |
| 5 | 批量选择元件 | 多选框显示 | ⏳ |
| 6 | 批量移动元件 | 所有元件同步移动 | ⏳ |
| 7 | 撤销操作 (Ctrl+Z) | 回到上一步状态 | ⏳ |
| 8 | 重做操作 (Ctrl+Y) | 恢复撤销内容 | ⏳ |
| 9 | 删除部分元件 | 元件消失 | ⏳ |
| 10 | 撤销删除 | 元件恢复 | ⏳ |
| 11 | 添加连线 20 条 | 所有连线显示 | ⏳ |
| 12 | 修改连线属性 | 颜色/粗细更新 | ⏳ |
| 13 | 添加网络标签 | 标签显示正确 | ⏳ |
| 14 | 添加电源符号 | 电源符号显示 | ⏳ |
| 15 | 添加接地符号 | 接地符号显示 | ⏳ |
| 16 | 运行 DRC 检查 | 显示检查结果 | ⏳ |
| 17 | 修复 DRC 错误 | 错误消失 | ⏳ |
| 18 | 保存项目 | 保存成功 | ⏳ |
| 19 | 关闭项目 | 返回项目列表 | ⏳ |
| 20 | 重新打开项目 | 所有修改保留 | ⏳ |
**验收标准**:
- [ ] 所有编辑操作正常
- [ ] 撤销/重做功能正确
- [ ] 数据持久化完整
- [ ] DRC 检查准确
---
### E2E-004: 文件导入导出流程
**优先级**: P1
**预计耗时**: 15 分钟
**前置条件**:
- 已登录
- 有示例文件
**测试步骤**:
| 步骤 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 点击"导入" | 文件选择器打开 | ⏳ |
| 2 | 选择 JSON 文件 | 文件解析成功 | ⏳ |
| 3 | 验证导入内容 | 元件和连线正确 | ⏳ |
| 4 | 保存导入的项目 | 保存成功 | ⏳ |
| 5 | 导出为 JSON | 文件生成成功 | ⏳ |
| 6 | 导出为 Tile 格式 | 文件生成成功 | ⏳ |
| 7 | 导出为 PDF | PDF 生成成功 | ⏳ |
| 8 | 导出为图片 (PNG) | 图片生成成功 | ⏳ |
| 9 | 重新导入导出的 JSON | 内容一致 | ⏳ |
| 10 | 验证数据完整性 | 无数据丢失 | ⏳ |
**验收标准**:
- [ ] 所有格式导入成功
- [ ] 所有格式导出成功
- [ ] 数据完整性保证
- [ ] 文件格式正确
---
## 🔌 边界条件测试
### E2E-005: 弱网环境测试
**优先级**: P1
**预计耗时**: 30 分钟
**测试场景**:
| 场景 | 网络条件 | 操作 | 预期结果 | 状态 |
|------|---------|------|---------|------|
| 1 | 3G (慢速) | 登录 | 登录成功,时间可接受 | ⏳ |
| 2 | 3G (慢速) | 同步项目 | 同步成功,显示进度 | ⏳ |
| 3 | 2G (极慢) | 保存项目 | 保存成功或提示超时 | ⏳ |
| 4 | 网络波动 | 编辑中网络切换 | 不崩溃,数据不丢失 | ⏳ |
| 5 | 请求超时 | 云同步 | 显示超时提示,可重试 | ⏳ |
**验收标准**:
- [ ] 弱网下不崩溃
- [ ] 有明确的加载/超时提示
- [ ] 支持重试机制
- [ ] 数据不丢失
---
### E2E-006: 断网环境测试
**优先级**: P0
**预计耗时**: 30 分钟
**测试场景**:
| 场景 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 断网打开应用 | 应用正常启动 | ⏳ |
| 2 | 断网登录 | 提示网络不可用 | ⏳ |
| 3 | 断网创建项目 | 本地创建成功 | ⏳ |
| 4 | 断网编辑项目 | 编辑功能正常 | ⏳ |
| 5 | 断网保存项目 | 保存到本地成功 | ⏳ |
| 6 | 断网查看历史项目 | 显示已缓存项目 | ⏳ |
| 7 | 恢复网络 | 自动检测网络恢复 | ⏳ |
| 8 | 网络恢复后同步 | 提示有未同步数据 | ⏳ |
| 9 | 执行同步 | 数据同步到云端 | ⏳ |
| 10 | 验证同步结果 | 云端数据完整 | ⏳ |
**验收标准**:
- [ ] 断网不崩溃
- [ ] 本地功能完整可用
- [ ] 网络恢复自动同步
- [ ] 数据一致性保证
---
### E2E-007: 低电量模式测试
**优先级**: P2
**预计耗时**: 20 分钟
**测试场景**:
| 场景 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 开启低电量模式 | 应用正常启动 | ⏳ |
| 2 | 低电量下编辑 | 功能正常,动画可能减少 | ⏳ |
| 3 | 低电量下保存 | 保存成功 | ⏳ |
| 4 | 电量 <10% | 显示低电量提示 | |
| 5 | 电量 <5% | 建议保存并退出 | |
| 6 | 自动关机前 | 自动保存当前项目 | |
**验收标准**:
- [ ] 低电量模式兼容
- [ ] 有电量提示
- [ ] 自动保存保护数据
---
### E2E-008: 存储空间不足测试
**优先级**: P1
**预计耗时**: 20 分钟
**测试场景**:
| 场景 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 存储空间 <100MB | 应用正常启动 | |
| 2 | 尝试保存大项目 | 提示空间不足 | |
| 3 | 清理空间后保存 | 保存成功 | |
| 4 | 缓存清理功能 | 可清理缓存释放空间 | |
| 5 | 云同步释放本地 | 可选择只保留云端 | |
**验收标准**:
- [ ] 空间不足有明确提示
- [ ] 提供清理建议
- [ ] 不崩溃不数据损坏
---
### E2E-009: 应用中断测试
**优先级**: P1
**预计耗时**: 30 分钟
**测试场景**:
| 场景 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 编辑中来电话 | 应用进入后台 | |
| 2 | 接听电话后返回 | 应用恢复数据完整 | |
| 3 | 编辑中切换应用 | 应用进入后台 | |
| 4 | 返回应用 | 恢复编辑状态 | |
| 5 | 编辑中锁屏 | 应用进入后台 | |
| 6 | 解锁返回 | 恢复编辑状态 | |
| 7 | 编辑中系统通知 | 通知显示不干扰 | |
| 8 | 后台时间过长 | 可能需要重新登录 | |
**验收标准**:
- [ ] 中断不丢失数据
- [ ] 恢复状态正确
- [ ] 自动保存触发
---
## 💥 崩溃率测试
### E2E-010: Crashlytics 集成
**优先级**: P0
**预计耗时**: 60 分钟
**集成步骤**:
```yaml
# pubspec.yaml 添加依赖
dependencies:
firebase_core: ^2.24.0
firebase_crashlytics: ^3.4.0
```
```dart
// main.dart 初始化
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
// 配置 Crashlytics
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
// 捕获未捕获的异常
PlatformDispatcher.instance.onError = (error, stack) {
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
return true;
};
runApp(MyApp());
}
```
**测试验证**:
| 测试项 | 操作 | 预期结果 | 状态 |
|-------|------|---------|------|
| 1 | 触发 Dart 异常 | Crashlytics 记录 | |
| 2 | 触发原生崩溃 | Crashlytics 记录 | |
| 3 | 查看 Firebase 控制台 | 崩溃报告显示 | |
| 4 | 崩溃堆栈分析 | 堆栈信息完整 | |
| 5 | 崩溃用户统计 | 用户 ID 关联 | |
| 6 | 崩溃版本分布 | 版本信息正确 | |
**验收标准**:
- [ ] Crashlytics 集成成功
- [ ] 崩溃自动上报
- [ ] 堆栈信息完整
- [ ] 崩溃率 <0.1%
---
### E2E-011: 压力测试
**优先级**: P1
**预计耗时**: 60 分钟
**测试场景**:
| 场景 | 操作 | 预期结果 | 状态 |
|------|------|---------|------|
| 1 | 快速连续点击 | 不崩溃有防抖 | |
| 2 | 大量元件 (5000+) | 可加载性能下降可接受 | |
| 3 | 快速缩放拖拽 | 不崩溃可能掉帧 | |
| 4 | 长时间运行 (1h+) | 内存不泄漏 | |
| 5 | 多次保存加载 | 数据一致 | |
| 6 | 多任务切换 | 应用状态保持 | |
**验收标准**:
- [ ] 压力下不崩溃
- [ ] 内存稳定
- [ ] 性能可接受
---
## 📊 测试结果汇总
### E2E 测试进度
| 测试用例 | 优先级 | 状态 | 通过率 | 备注 |
|---------|-------|------|-------|------|
| E2E-001 新用户流程 | P0 | 待测 | - | - |
| E2E-002 老用户登录 | P0 | 待测 | - | - |
| E2E-003 项目编辑 | P0 | 待测 | - | - |
| E2E-004 导入导出 | P1 | 待测 | - | - |
| E2E-005 弱网环境 | P1 | 待测 | - | - |
| E2E-006 断网环境 | P0 | 待测 | - | - |
| E2E-007 低电量 | P2 | 待测 | - | - |
| E2E-008 存储不足 | P1 | 待测 | - | - |
| E2E-009 应用中断 | P1 | 待测 | - | - |
| E2E-010 Crashlytics | P0 | 待测 | - | - |
| E2E-011 压力测试 | P1 | 待测 | - | - |
### 总体统计
```
总测试用例11
已完成0 (0%)
进行中0 (0%)
待测试11 (100%)
P0 用例5 - 完成 0 (0%)
P1 用例5 - 完成 0 (0%)
P2 用例1 - 完成 0 (0%)
```
---
## 🔧 自动化测试脚本
### Flutter Integration Test
```dart
// test/e2e/user_flow_test.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
group('E2E User Flow Tests', () {
testWidgets('Complete new user flow', (tester) async {
// 启动应用
await tester.pumpWidget(MyApp());
await tester.pumpAndSettle();
// 注册
await tester.tap(find.text('注册'));
await tester.pumpAndSettle();
await tester.enterText(
find.byType(TextFormField).at(0),
'test@example.com',
);
await tester.enterText(
find.byType(TextFormField).at(1),
'password123',
);
await tester.tap(find.text('注册'));
await tester.pumpAndSettle();
// 验证登录成功
expect(find.text('项目列表'), findsOneWidget);
});
});
}
```
### 运行自动化测试
```bash
# 运行 E2E 测试
flutter test integration_test/e2e/
# 生成测试报告
flutter test --coverage
```
---
## 📅 测试执行计划
### Week 11
| 日期 | 测试内容 | 负责人 |
|------|---------|-------|
| 周一 | E2E-001, E2E-002 (用户流程) | 测试工程师 |
| 周二 | E2E-003 (项目编辑) | 测试工程师 |
| 周三 | E2E-004, E2E-005 (导入导出/弱网) | 测试工程师 |
| 周四 | E2E-006, E2E-007 (断网/低电量) | 测试工程师 |
| 周五 | E2E-008, E2E-009 (存储/中断) | 测试工程师 |
### Week 12
| 日期 | 测试内容 | 负责人 |
|------|---------|-------|
| 周一 | E2E-010 (Crashlytics 集成) | 测试工程师 |
| 周二 | E2E-011 (压力测试) | 测试工程师 |
| 周三 | 问题修复验证 | 测试工程师 |
| 周四 | 回归测试 | 测试工程师 |
| 周五 | E2E 测试报告 | 测试工程师 |
---
**文档维护**: 测试工程师
**最后更新**: 2026-03-07