102 lines
3.0 KiB
Markdown
102 lines
3.0 KiB
Markdown
# Flutter + Go 分层测试体系实施模板(业务代码零侵入)
|
||
|
||
> 目标:在不修改 `lib/` 业务实现的前提下,补齐可落地、可持续演进的测试分层与 CI 模板。
|
||
|
||
## 1. 推荐目录分层
|
||
|
||
```text
|
||
project_root/
|
||
├── test/
|
||
│ ├── widget/
|
||
│ └── golden/
|
||
├── integration_test/
|
||
├── patrol_test/
|
||
├── go/go_core/
|
||
│ └── internal/**/*_test.go
|
||
└── .github/workflows/
|
||
├── pr-tests.yml
|
||
└── release-e2e.yml
|
||
```
|
||
|
||
- `test/widget/`:组件行为与交互局部验证(快)。
|
||
- `test/golden/`:视觉基线与 UI 回归(中速)。
|
||
- `integration_test/`:关键业务流程主链路(慢)。
|
||
- `patrol_test/`:真机/模拟器系统级能力(最慢、最高真实性)。
|
||
- `go/go_core/internal/**/*_test.go`:后端 handler/service/repository 单测(快)。
|
||
|
||
## 2. 本仓库落地约束
|
||
|
||
1. **不改业务代码**:仅新增测试脚手架、测试文档、CI 编排。
|
||
2. **先快后慢**:PR 默认只跑 `widget + go unit (+ 可选 golden)`。
|
||
3. **重流程放夜间/发布前**:`integration + patrol` 放 `release-e2e.yml`。
|
||
4. **失败可定位**:每一层独立 Job,避免“大锅饭”日志。
|
||
|
||
## 3. 本地执行命令模板
|
||
|
||
```bash
|
||
# Flutter 依赖
|
||
flutter pub get
|
||
|
||
# 快速反馈层
|
||
flutter analyze
|
||
flutter test test/widgets test/features test/runtime
|
||
|
||
# Golden(有目录时)
|
||
flutter test test/golden
|
||
|
||
# Integration
|
||
flutter test integration_test
|
||
|
||
# Patrol(安装后)
|
||
patrol test patrol_test
|
||
|
||
# Go 单元测试
|
||
cd go/go_core && go test ./...
|
||
```
|
||
|
||
## 4. Golden 约定(模板)
|
||
|
||
- 黄金图建议集中在 `test/golden/goldens/`。
|
||
- 统一尺寸、字体、主题,降低跨平台漂移。
|
||
- 更新基线命令(示例):
|
||
|
||
```bash
|
||
flutter test test/golden --update-goldens
|
||
```
|
||
|
||
## 5. Patrol 约定(模板)
|
||
|
||
- `patrol_test/` 覆盖系统权限弹窗、WebView、文件选择、原生交互。
|
||
- PR 不强制 Patrol,避免高成本阻塞。
|
||
- 发布前执行 `release-e2e.yml` 中 Patrol Job。
|
||
|
||
## 6. GitHub Actions 分层执行建议
|
||
|
||
### PR 层(`pr-tests.yml`)
|
||
|
||
- `analyze`:`flutter analyze`
|
||
- `flutter-unit-widget`:`flutter test`(核心 test 目录)
|
||
- `go-unit`:`go test ./...`
|
||
- `flutter-golden`(可选):仅当 `test/golden/` 存在并有测试文件时执行
|
||
|
||
### 发布前层(`release-e2e.yml`)
|
||
|
||
- `flutter-integration`:关键流程回归
|
||
- `patrol`:真机/模拟器系统级流程
|
||
- 可选接入人工审批与制品归档
|
||
|
||
## 7. 增量演进路线
|
||
|
||
1. 先稳定 PR 快速层(分析 + Flutter 单测 + Go 单测)。
|
||
2. 再补 golden 基线(页面级视觉回归)。
|
||
3. 然后扩展 integration_test 核心路径。
|
||
4. 最后补 Patrol 的系统级场景,绑定发布前门禁。
|
||
|
||
## 8. 验收清单(模板)
|
||
|
||
- [ ] PR 在 10~15 分钟内完成快速反馈。
|
||
- [ ] Go 与 Flutter 测试失败可单层定位。
|
||
- [ ] Golden 回归有固定目录与更新机制。
|
||
- [ ] integration_test 覆盖关键业务主路径。
|
||
- [ ] Patrol 覆盖至少 1 条权限或系统弹窗关键流。
|