作者:张志阳
“云测” 是近几年业内的热词, 不仅仅商用的云测平台越来越多,各大厂也早早的着手构建适合自己的云测平台,在 MTSC、NCTS、阿里云栖 等大会上 ,经常可以听到相关的分享,十分精彩,受益匪浅。对这些平台做调研和比较后可以发现,云测平台包含的通用功能基本分为 远程真机、自动化测试 两大类。
今天主要向大家介绍一下,转转 App 自动化流程中重要的一个环节 - 远程设备调度。
移动端自动化云测的两个组成部分:远程设备、自动化流程。
远程设备在哪里?
云测平台,远程设备是关键,如果没有远程设备,当然也就不能称之为云测了。
当前转转 QA 的设备均已由云设备平台 (MCP) 进行统一管理,大家在日常工作中,都会在 MCP 上申请&操作远程设备,有效的利用设备资源。
这些设备都连接在一个个 MCP 专用管理设备的服务器上, 并且在每台服务器上都有一个 Agent 服务,实时的监控设备的状态 &同步设备信息给 MCP。
所以,实现调度远程设备,需要 MCP 提供支持。
MCP 中有一些对设备的初始化、重启、安装应用、上传文件等常用操作,当用户在 MCP 上触发以上操作时,MCP 会向 Agent 发送对应指令,Agent 执行对应操作后再同步给 MCP 执行结果。这其实就是一套完整的远程设备的操作过程,自动化测试也可以参考这个流程。
自动化测试任务有很多自定义的配置,在独立的测试平台上统一管理,所以只能通过接口与 MCP 通信。
当时大致的流程设想如下:
1. 在自动化测试平台上,配置自动化任务,触发自动化请求 MCP 执行接口,告知使用的设备及对应的自动化任务和自动化参数
2. MCP 在接收到请求之后,解析参数,获取自动化选择的设备
3. MCP 向设备所在服务器的 Agent 发送自动化指令,并传递自动化参数
4. Agent 接收自动化指令,解析参数,下载自动化所需的文件,拼装自动化 Command,执行
跟负责 MCP 和 Agent 的相关同事进行了方案讨论,发现原设想的方案中,遗漏了很多细节,都需要提前确定清楚,最终又补充了一些细节,如下:
1. 自动化应该是独立的状态标识,在前端显示,便于设备筛选,也便于一些设备管理功能的区分处理
2. 自动化可能同时下发 Android + iOS 的多端多个设备,执行接口设计时需要考虑
3. 自动化 Command 会持续新增,不能写死,需要预留参数接收一些动态的信息,便于 Agent 解析&拼装 Command, 也避免自动化有变化就需要修改 Agent 的现象出现
4. 多设备在同一服务器上执行不同任务,使用的自动化文件需要按设备区分,避免互相影响
5. 执行完自动化,需要将设备归还给 MCP,初始化后,释放给他人使用,MCP 提供归还接口
6. 如性能测试会出现连续执行多次的情况,为避免单次执行归还后,碰巧被他人或其他自动化任务占用,自动化执行接口应支持可以使用正在执行自动化状态的设备执行
7. 自动化任务可能有因误操作/临时任务变动/设备急用等需要立刻中断设备占用&中断自动化执行的情况出现,所以需要 MCP 提供中断自动化任务接口,及时结束正在执行的自动化任务、释放设备。
自动化测试平台
1. 根据已有的自动化测试类型 、自动化测试执行策略、测试框架支持的 Command,整理出自动化执行时使用的所有数据信息
2. 增加 MCP 设备的信息同步及展示,区分远程设备与本地设备
3. 增加 调用 MCP 执行接口执行测试计划
4. 增加 设备同步任务结束的接口(检查设备任务是否全部结束&无任务时归还设备)
5. 增加中断测试任务的功能
6. 在 MCP 的所有服务器上部署自动化执行环境
MCP
1. 提供 MCP 设备信息获取接口
2. 提供执行自动化测试接口,包含一个 args 变量,用于接收任意内容,直接传递给 Agent
3. 提供中断自动化测试接口
4. 提供设备归还的回调接口
5. 增加自动化占用设备的相关管理逻辑
Agent
1. 增加自动化测试类型的服务接口, 包含一个 args 变量,用于接收任意内容,直接拼接在自动化执行 Command 最后
2. 增加自动化进程的状态监控,汇报任务的 执行失败、执行成功、执行超时的状态
3. 增加中断自动化进程的服务接口
最终在大家的辛苦支持、共同努力下,调度远程设备执行自动化的流程搭建完成
绿色线条为调度远程设备执行自动化的完整流程,红色则为执行失败 或 中断执行时 的流程。这一套流程已经使用了近一年的时间,十分稳定,已经满足了调度远程设备执行自动化的需求。当自动化的任务类型增多时,也只需先扩展自动化框架的执行参数,并通过 MCP 的执行接口传递即可,MCP 及 Agent 不需要做任何修改。
在建立好完善的远程设备调度流程之后,便是我们怎样来利用远程设备执行自动化,这里向大家简单介绍 3 种已经在使用的调度策略
1. 常规的手动选择设备执行测试计划:多端多设备,随意选择
2.设置定时任务,定时执行测试计划:
- 默认使用已选择的设备
- 定时任务可通过参数指定设备
- 指定设备/已选择设备不可用时,优先分配相同数量的 与当前任务绑定的已调适设备 (绿色表格部分),并邮件通知执行人分配的设备
- 若无已调适/已调适设备都不可用/已调适设备不够分配 时,会根据所需设备的平台及数量在 支持自动化的设备列表里随机分配设备,并邮件通知执行人分配的设备
- 若自动化设备池中 可用设备不足时,则会随机分配其他空闲设备,并邮件通知执行人分配的设备 & 提醒所分配的设备可能因未调适而导致执行结果异常
3.调用执行接口执行 指定测试计划/指定自动化测试类型:可指定设备,也支持与定时任务相同的设备分配规则
当前的设备调度流程和调度策略,都试用于使用设备默认状态(无代理、无特殊设置)下的测试需求,但其实在大家日常的测试工作中,经常会有比如 通过线下环境测试业务、通过对设备特殊设置&准备后再测试 等特殊需求,若想在现在的自动化远程执行流程中 也支持这些需求,设备的调度流程和策略必然都需要一些修改。
后续则会根据实际的需求,一一进行修改,支持更多的自动化策略。
欢迎关注公众号:转转 QA