查看原文
其他

移动端自动化测试-远程设备调度

转转QA 转转QA 2022-11-09

作者:张志阳

前言:   

    “云测” 是近几年业内的热词,  不仅仅商用的云测平台越来越多,各大厂也早早的着手构建适合自己的云测平台,在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.设置定时任务,定时执行测试计划:   

            a.默认使用已选择的设备

            b.定时任务可通过参数指定设备

            c.指定设备/已选择设备不可用时,优先分配相同数量的 与当前任务绑定的已调适设备(绿色表格部分),并邮件通知执行人分配的设备

            d.若 无已调适/已调适设备都不可用/已调适设备不够分配 时,会根据所需设备的平台及数量在 支持自动化的设备列表里随机分配设备,并邮件通知执行人分配的设备

            e.若 自动化设备池中 可用设备不足时,则会随机分配其他空闲设备,并邮件通知执行人分配的设备 & 提醒所分配的设备可能因未调适而导致执行结果异常

        3. 调用执行接口执行 指定测试计划/指定自动化测试类型:可指定设备,也支持与定时任务相同的设备分配规则


后续计划:

    当前的设备调度流程和调度策略,都试用于使用设备默认状态(无代理、无特殊设置)下的测试需求,但其实在大家日常的测试工作中,经常会有比如 通过线下环境测试业务、通过对设备特殊设置&准备后再测试 等特殊需求,若想在现在的自动化远程执行流程中 也支持这些需求,设备的调度流程和策略必然都需要一些修改。

    后续则会根据实际的需求,一一进行修改,支持更多的自动化策略。

往期精彩回顾

IOS远程真机控制实践

Java字节码增强技术介绍

RPC服务测试新思路

MQ消息构造--学会分解问题

浅谈IM与相关测试方法

CodeDiff实现方案简述

抓包工具wireshark的使用

移动端H5性能测试平台(上)

欢乐送小程序自动化探索实践

1分钟了解转转小程序测试体系

转转测试环境平台解决方案

效能提升的江湖路--转转Beetle平台百天记

Xmind To Cases 工具

转转交易全链路接口测试发展及扩展







您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存