专栏文章 通过合理调度设备,降低企业设备成本

UC研发效能 · 2020年06月15日 · 最后由 贫僧纠结中 回复于 2020年06月19日 · 3292 次阅读

背景

岩鼠平台,支持云真机租用,也支持自动化测试。其背后都是大量设备资源的使用,而真机测试设备及自动化测试的设备资源是否能合理利用,关系到企业的设备成本。如何达到设备利用最大化呢,有几个维度需要考虑:

  • 在保证真机测试需求下,合理利用空闲机器进行自动化测试
  • 不同自动化测试类型测试时长不同
  • 不同测试类型对设备机型要求不同
  • 更大程度的延缓设备老化

为了保证真机测试需求,同时提升整体自动化测试的成功率和稳定性,也为了能让各台设备达到最大利用率,岩鼠平台做了不少设计和优化,积累了一些经验,在此与各位读者分享一下。

解决方案

整体概述

首先,由于云真机和自动化都会占用机器,我们可以根据云真机的使用需求,为云真机和不同的自动化测试各自分配自己的设备池子。但由于需求是在一定范围内波动,不是完全定量的,因此可以将部分设备设置为共用,这样能最大程度的将设备利用起来。

而其中的难点又在于,对于自动化测试来说,有多个设备池子,不同测试对设备的要求又不同,通过什么样的策略才能更大程度的保障任务成功率和设备利用率呢?接下来将对此重点介绍。

自动化测试中,从任务创建开始,到任务在各个具体设备上执行,总共经历了三个阶段,分别是:设备准备、设备规则筛选、设备排位与占用,可选设备逐阶段减少,大体如下:

阶段一:设备准备

本阶段主要是初步筛选出适合待分配任务的基础设备池,其中主要有以下流程:

  1. 若用户创建任务时有指定的分配策略,则预加载,否则使用默认策略,例如目前岩鼠平台开放了 “随机” 策略,则在此处会预加载 “随机” 策略设置的关联约束和筛选偏好;
  2. 不同的测试类型(如兼容性,或者是深度智能遍历),需要加载不同的设备组,一是考虑到术业有专攻,里面都是经过平台精心挑选和分类的适合该测试场景的设备,二是尽量减少彼此之间的影响,例如对于同一台设备,平台是会争取避免上一个跑偏重于性能测试的任务,而下一个却是跑偏重于稳定性的任务;
  3. 筛选用户权限范围内的设备;
  4. 准备好设备的各种筛选属性,并根据一定时间内的已运行任务数和运行时间,通过特定公式算出一个值,可以认为这个值就是该设备的疲劳系数。

通过上述可知,此处提到的策略和设备组,都是平台已经预置好的,也会随着已有的运行结果和实际的业务发展而持续演变,并结合大数据平台进行优化,这里就不再展开了。

阶段二:设备规则筛选

从处理逻辑来看,这阶段更像是一个规则引擎,根据需求可加载不同的插件,进一步优选出符合实际测试要求的可运行设备池,目前已支持的有:

  • 根据 app 设置去筛选所需设备的最低/最高版本,例如某些应用只能运行在 Android 6.0 以上的设备,这也是保证任务成功的前提条件之一;
  • 默认会根据疲劳系数和过往任务成功率进行优先级排列,也可以接受自定义权值,例如是看重成功率,则将成功率的权值提高,或者是想要优先使用较 “新” 的设备,则可以结合疲劳系数和入库时间传入权值,这些都会影响到设备的推荐分数;
  • 默认是 “随机” 策略,但也可定制其它策略,例如 Android 的 API 遍历,就是从每个 Android 版本里面各挑出一台设备组成测试,以达到测试版本兼容性的目的;
  • 可指定特定品牌或特定机型进行测试,当然也少不了 TOP10、TOP20、TOP50 的维度;
  • ……

这里的筛选插件相互之间基本是 “且” 的关系,即对设备进行层层过滤,若有特殊需求,也可以配置出 “或” 的关联;对于有经验的开发者,查看接口文档之后,一般一两个小时即可开发出一个新插件,测试通过之后就能注册到容器中,从而对外提供服务。

阶段三:设备排位与占用

经过层层筛选之后,最终落实到占用设备的环节,又细分出两大步骤:

  1. 经过上面两个步骤,每台设备都会有一个推荐分数,此处会根据分数进行区间划分(可以考虑下为啥不直接按分数高低倒序分配),高分区间会优先被占,分到同一区间的则会进行疲劳系数排队,系数越小,排名越前,最终得到提权后的设备队列;若排名也一致,则再进行随机出列的处理;
  2. 从队列取出第一台设备,若设备能被占用,则落实到该子任务;若设备占用失败,则继续下一设备的尝试,直到没有空余设备,或清空了子任务列表,则整体分配完毕。

优缺点

人无完人,更何况是管理了这么多 “性格各异” 的设备的方案呢,先说说好的方面:

  • 由于疲劳系数的引入,除开某些崩得太严重的个体,用于自动化测试的设备都有机会、且平均地被分配到任务,需要注意的是,这里说的平均,不是绝对的平均,还是要看设备本身的素质,若能力越强,分到的任务也多,反之亦然;
  • 筛选插件可不断扩展,快速满足各种分配需求;
  • 毕竟最终都是对口的设备,可有效提高任务成功率。
    至于不好的,在设计之初也是有所预见:

  • 存在一些重复或无用的查询问题,例如算了好几台设备的疲劳系数,但可能在筛选中早早就被过滤了;

  • 并发性能受到约束,考虑这么一个场景:一个任务不要的设备,却是另一个任务需要的。

未来方向

更进一步提升设备分配策略和算法,更大程度的提升设备利用率,在满足业务需求的情况下,降低成本:

  • 彻底的分布式处理;
  • 结合大数据,构筑更全面的优选规则;
  • 真正 AI 的引入,实现更精准、更快速的推荐,减少人工开发。

# 免费试用岩鼠云设备平台
赶快来试用下岩鼠云真机吧!每天都有免费试用体验额度哦。

岩鼠云设备平台 - 云端设备,触手可及

共收到 1 条回复 时间 点赞
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册