4. 正向权限授予用例:首次启动应用、正常弹出权限对话框、用户点击允许、验证CameraX初始化成功
适用场景
当用户首次安装并启动集成了 CameraX 的 Android 应用时,系统会触发运行时权限请求。本用例覆盖用户主动授予相机权限且应用成功初始化 CameraX 的完整正向链路。适用于以下条件:
- 目标设备运行 Android 6.0(API 23)及以上版本。
- 应用未保存任何权限状态(首次安装或清除数据后启动)。
- 设备的相机硬件正常工作且未被其他进程独占。
前置条件
- 测试设备已恢复出厂设置或应用数据已清除,确保无已保存的权限记录。
- 待测应用版本为最新构建包,且已在测试机正常安装。
- 测试环境网络连通(用于 CameraX 初始化时可能触发云端配置拉取,非强制)。
- 测试人员准备录屏工具或屏幕截图工具,用于记录材料。
操作步骤
按下表顺序执行操作,每一步完成后须记录截图或日志时间戳:
| 步骤编号 | 操作内容 | 预期中间结果 |
|---|---|---|
| 1 | 在测试机上点击应用图标,启动应用。 | 应用主界面正常显示,无闪退或黑屏。 |
| 2 | 进入需要相机权限的功能页面(如扫码、拍照、视频录制等)。 | 系统弹出标准权限请求对话框,标题为“允许<应用名>拍摄照片和录制视频吗?”,包含“允许”和“拒绝”按钮。 |
| 3 | 点击权限对话框中的“允许”按钮。 | 对话框关闭,应用继续执行;无二次弹框或系统设置跳转。 |
| 4 | 观察应用界面,等待不超过 3 秒。 | 相机预览画面正常显示(若为预览界面),或扫描/拍摄功能就绪(无持续 loading 或错误提示)。 |
| 5 | 手动触发 CameraX 初始化完成事件(如查看日志输出“CameraX initialized successfully”)。 | 应用无 ANR、无堆栈溢出、无空指针异常。 |
输入输出物
输入物:
- 待测应用 APK(版本号与构建标识)。
- 测试设备信息(厂商、型号、Android 版本、相机参数)。
- 首次启动的空白权限记录(通过清除应用数据实现)。
输出物:
- 用例执行记录(含步骤截图、日志文件、录屏文件)。
- 权限授予成功后的 CameraX 初始化状态确认(可通过日志关键字或 UI 反馈确认)。
- 回归测试结论(通过/失败)。
责任边界
| 角色 | 职责 |
|---|---|
| 测试工程师 | 执行操作步骤,记录日志与截图,判断预期结果是否符合,提交缺陷报告。 |
| 开发工程师 | 提供 CameraX 初始化成功的日志输出标准,修复测试中发现的权限请求与初始化相关的缺陷。 |
| 产品经理 | 确认权限请求文案与交互是否符合产品设计规范。 |
记录材料
- 录屏/截图:权限对话框弹出截图、点击“允许”后界面变化截图、CameraX 预览界面截图。
- 日志文件:adb logcat 过滤 CameraX 相关标签(如 “CameraX” 或 “Camera2”)的完整日志,需包含时间戳。
- 测试设备信息:使用 adb shell getprop 输出设备属性,或手动记录设置中的“关于手机”信息。
- 异常记录:执行过程中如出现不符合预期的弹窗、卡顿、崩溃,需额外保存堆栈日志。
异常处理
| 异常场景 | 处理方式 |
|---|---|
| 权限对话框未弹出 | 检查应用是否在 manifest 中声明了 CAMERA 权限(非代码检查,仅确认清单文件完整性);若仍无弹框,记录缺陷并标记为失败。 |
| 点击“允许”后对话框不关闭 | 重启应用后重试;若复现,收集系统日志并标记为严重缺陷。 |
| CameraX 初始化超时(超过 5 秒) | 记录日志,检查相机硬件可用性;若非硬件问题,按性能缺陷提交。 |
| 相机预览黑屏或花屏 | 检查是否被其他相机应用占用后台进程;关闭后台应用后重试,若仍失败,记录渲染异常缺陷。 |
| 应用崩溃(闪退) | 立刻保存完整 logcat 和 tombstone 文件;标记用例为失败,并提交崩溃缺陷。 |
验收标准
- 权限对话框在用户首次进入相机功能时正确弹出,且文字与设计稿一致。
- 点击“允许”后,权限状态变更为已授予(可通过 adb shell dumpsys package 验证)。
- CameraX 初始化成功,日志中存在 “CameraX initialized” 或等效关键字,无 ERROR 级输出。
- 相机预览画面正常显示,无黑屏、闪屏、绿屏或大面积噪点。
- 应用内存占用在初始化完成后不超过基线值的 120%(基线值由性能测试提供)。
- 整个操作流程无 ANR(应用无响应)发生。
关键提示: 首次启动权限授予是回归测试的基础用例,后续所有权限相关测试(如拒绝后再次请求、后台权限变更、多设备兼容等)均依赖此用例的稳定通过。建议在每轮回归中优先执行本用例,确保基础链路无退化。