前言
前面提到,面对 android 系统的碎片化问题,如何在应用快速迭代的过程中,尽可能早地发现应用的版本兼容问题。
当前我们的想法是通过 多机并发运行测试用例,以此检测应用针对不同机型,不同系统的兼容性问题,提升开发,测试人员的工作效率。
测试设备
真机
使用真机进行并发测试存在问题
- 使用真机来运行测试用例,对资源的要求较高(测试机比较紧缺)
- 真机存在网络切换,电量, usb 连接等问题
解决方案
针对真机测试的种种问题,我们决定使用虚拟机设备来模拟多机并发自动化测试,好处如下
- 不抢占真机资源,方便测试的正常运行
- 不存在网络切换,电量,usb 连接问题
- 可从 PC 端统一管理,创建开启虚拟机(只要硬件设备足够,可开启多台虚拟设备)
- 各系统设备覆盖全面
虚拟机设备
使用虚拟设备,同样存在一些问题
- 被测应用不允许在虚拟设备上运行
- 虚拟机网络切换问题(需要通过切换网络来测试指定环境的应用)
- 在运行测试用例的过程中,后台接口的波动会影响用例的正常运行
解决方案
针对上面的问题我们的解决方案如下
- 应用适配虚拟机设备运行(某些 sdk 的调用增加指令集兼容)
- 搭建 dns server 来模拟网络环境切换(虚拟机无法读取宿主机本地 host 文件)
- 实现部分网络请求数据 Mock,降低与后台接口的依赖程度
数据 Mock
本文主要描述的是关于接口数据 Mock 的实践流程,咱们先看看效果(基本流程使用的都是 Mock 接口数据)。
Mock 平台选择
我们选择 EasyMock 作为数据 Mock 平台,有如下原因
- 支持随机生成接口数据(通过正则表达式,占位符等方式)
- 支持基于 Swagger 创建 Easy Mock 项目,根据现有 Swagger 文档动态生成 Mock 接口
- 响应式数据,支持在接口 mock 文本中加入代码逻辑
移动端应用请求处理
通过开始的演示图片可以发现,我们将数据 Mock 功能嵌入到了开发者工具当中,在测试应用前先在开发者工具当中选择需要被 Mock 的接口 url,那么这些接口在请求的过程中就会被转发到我们搭建的 Mock Server
大致原理为应用内部在请求处理的过程中,将请求拦截,转发到对应的 Mock 接口
自动化测试脚本
- 支持配置是否需要 Mock 数据
- 在 Mock 模式下运行时首先需要开启数据 Mock 功能(在 UI 层面控制开关)
- 在某些步骤下需要区分是否为 Mock 模式(Mock 数据不包含业务逻辑)
总结
- 虚拟机相关问题解决
- 数据 Mock 平台搭建
- 移动应用请求转发
- UI 自动化脚本适配数据 Mock 运行