在开始的时候,我也尝试去找一些常用的框架或者机制,但是在实际情况面前,纷纷被我否了。在与8、9位测试工程师应聘者聊过之后,坚定了造个轮子的信念。
# 需求和目的
特殊情况,情况即条件,条件艰苦,对于现成框架来说是灾难。
- 人员分散,部分开发工程师分隔在两地,开发和测试分隔在两地;
- 工作负载最重的工作站在本地,而非云上,48核的云上实例实在是有些贵;
- 各服务之间存在着公司VPN的隔离,工作站在公司内网以外(还是因为异地办公);
- 输出为Android ROM包,体积较大。
想要达到的目的,从结构上看,目的很轻,现成框架会显得太过臃肿。
从包的角度的流水
APP源码 -> APKs -> Android SDK源码 -> ROM -> 自动化测试
-> (通过) -> 输出ROM
-> (不通过) -> 定位APK -> 定位app源码
从服务的角度的流水
APP源码仓库监控服务/APK包仓库监控服务/手动命令监控服务
-> 上传/转移发送服务
-> 上传/转移接收服务
-> 自动编译打包服务
-> ROM部署安装服务
-> 自动化测试脚本运行服务
-> 测试结果反馈服务
设计图
# 解释
实现该想法其实前前后后花了大概一周的时间,从设计图上可以看出来,其实工作量主要还是各个环节的联调。原理比较简单,使用MQTT来联通处在各处的服务。贴一下core的部分代码,其他模块的结构基本一致。
各模块结构示意:
|
|
CORE部分代码:
|
|
# 几条经验
- 调试消息类的业务,请提前准备好测试消息,可以不依赖其他环节,各个击破。
- python模块的天生单例特性,对维护全局数据很有帮助。
- 使用统一的结构来开发各模块,对后期维护和开发过程都有很大便利。
- 善用数据库,可以减轻大量的日常运维工作。
# 版本更新
V1.2
- 编译服务落地所有增量包UTC值数据库化
- 编译服务加入锁机制
- 编译服务加入BC机器人
- 解决通知机器人不能连续发送多个消息的问题,解决不支持多版本串行编译的问题
- 丰富通知消息的信息,包括更新的包等有用信息