# 小程序 E2E 自动化测试 ## 测试范围 | 套件 | 文件 | 用例数 | 覆盖内容 | |---|---|---|---| | 冒烟测试 | `smoke/app-launch.spec.js` | 2 | 首页加载、TabBar 导航(4 个 tab 互切) | | 个人中心旅程 | `journeys/profile-journey.spec.js` | 2 | 我的课程页、个人中心(会员信息) | | 团课预约旅程 | `journeys/booking-journey.spec.js` | 3 | 首页课程元素、搜索功能("瑜伽")、课程卡片→详情 | --- ## 环境要求 - 微信开发者工具(安装路径 `D:\微信web开发者工具\`) - 小程序项目已编译:`unpackage/dist/dev/mp-weixin` - 服务端口:`63956`(默认,可通过 `WECHAT_DEVTOOLS_PORT` 环境变量修改) --- ## 触发方式 ### 1. npm scripts(日常开发首选) | 命令 | 说明 | IDE 管理 | |---|---|---| | `npm test` | 全量测试 | 自动启动,保持运行 | | `npm run test:smoke` | 仅冒烟测试 | 自动启动,保持运行 | | `npm run test:journeys` | 仅用户旅程测试 | 自动启动,保持运行 | | `npm run test:profile` | 仅个人中心 | 自动启动,保持运行 | | `npm run test:booking` | 仅团课预约 | 自动启动,保持运行 | | `npm run test:all` | 全量 + 测试后关闭 IDE | 自动启动,自动关闭 | | `npm run test:watch` | Watch 模式(文件变更自动重测) | 需要 IDE 预先运行 | | `npm run test:quick` | 快速运行(IDE 需已开启) | 不管理 IDE | | `npm run test:quick:smoke` | 快速冒烟(IDE 需已开启) | 不管理 IDE | ### 2. 一键脚本 ```powershell # 全量测试 node e2e/run-tests.js # 仅冒烟 node e2e/run-tests.js --smoke # 仅用户旅程 node e2e/run-tests.js --journeys # 全量 + 关闭 IDE(CI 用) node e2e/run-tests.js --close # 详细日志 node e2e/run-tests.js --verbose # Watch 模式 node e2e/run-tests.js --watch ``` ### 3. IDE 保持运行 + 反复快测 ```powershell # 首次:启动 IDE npm test # 后续修改代码后:秒级快速验证 npm run test:quick npm run test:quick:smoke ``` ### 4. Git Pre-commit Hook 安装: ```bash # 方式 A:Husky(推荐) npx husky init npx husky add .husky/pre-commit "sh gym-manage-uniapp/scripts/pre-commit-miniapp-test.sh" # 方式 B:手动 cp scripts/pre-commit-miniapp-test.sh .git/hooks/pre-commit ``` 行为: - 仅当 `gym-manage-uniapp/pages/` 或 `gym-manage-uniapp/e2e/` 有变更 **且** IDE 在运行时触发 - 不满足条件 → 静默跳过,不阻塞提交 - 失败时提示 `git commit --no-verify` 可跳过 ### 5. Jenkins CI ``` Jenkins → Build with Parameters → TEST_SCOPE = miniapp ``` Pipeline 自动完成:编译 → 启动 IDE → 测试 → 关闭 IDE → 归档报告。 --- ## 架构 ``` e2e/ ├── jest.config.js # Jest 配置(maxWorkers:1 顺序执行) ├── setup.js # 全局变量注入 ├── globalSetup.js # 测试前准备 ├── globalTeardown.js # 测试后清理(不关 IDE) ├── run-tests.js # ★ 主入口:IDE 管理 + 测试调度 ├── helpers/ │ └── automator.js # 连接/断开 IDE(单例模式) ├── pages/ # Page Object 层 │ ├── HomePage.js │ ├── LoginPage.js │ ├── SearchPage.js │ ├── CourseDetailPage.js │ ├── ProfilePage.js │ └── MyCoursesPage.js ├── smoke/ │ └── app-launch.spec.js # 冒烟测试 └── journeys/ ├── profile-journey.spec.js └── booking-journey.spec.js ``` --- ## 执行顺序与状态管理 ``` suite 执行顺序(jest.config.js 中 testMatch 固定): 1. smoke/app-launch.spec.js → 结束于 index tabbar ✓ 2. journeys/profile-journey → 结束于 index tabbar ✓ 3. journeys/booking-journey → 最后一个测试进入 course-detail(非 tabbar) ↑ 放在最后执行,不影响后续套件 ``` **关键约束**:`miniprogram-automator` 的 `switchTab` / `reLaunch` 从非 tabbar 页面调用会超时。所有测试必须确保: - 从 tabbar 页面开始(每个测试自己 `switchTab` 到目标 tab) - 最后一个套件的最后一个测试可以进入非 tabbar 页面 --- ## 环境变量 | 变量 | 默认值 | 说明 | |---|---|---| | `WECHAT_DEVTOOLS_CLI` | `D:\微信web开发者工具\cli.bat` | 微信开发者工具 CLI 路径 | | `UNIAPP_OUTPUT` | `unpackage/dist/dev/mp-weixin` | 小程序编译输出目录 | | `WECHAT_DEVTOOLS_PORT` | `63956` | 自动化服务端口 | --- ## 已知限制 1. `miniprogram-automator` 的 `switchTab` / `reLaunch` 从非 tabbar 页(如 course-detail)调用会超时 10s 2. 微信开发者工具 CLI 路径含中文,需 `shell: true` 启动 3. 多个测试套件不能共享 IDE 时同时运行(`maxWorkers: 1`) 4. 搜索页 `.clickResult()` 不会触发页面跳转(搜索结果为同页内展示)