在2016杭州云栖大会的“开源无线和前端”专场上,南方航空移动架构师孔兆祥带了题为《南航Macaca技术实践》的精彩分享。分享中,他首先介绍了Macaca的基本概念;接下来重点讲解了Macaca落地南航的过程;分享结尾,他对Macca未来的使用方向做了展望。
以下内容根据演讲PPT及现场分享整理。
南航与Macaca
在没有接触Macaca之前,南航在移动端自动化测试是完全空白的:QA基本靠人工操作完成测试。随着南航业务不断地发展,开发迭代速度的加快,纯人工操作已经无法满足快速迭代的需求;另外,南航需要推广自身的DevOps,但由于其自身特点,DevOps需要很大范围内接入自动化测试工作。
为了解决上述问题,南航亟需寻找一个满足下列要求的自动化测试方案:
- 第一较低的学习成本;
- 第二便于上手;
- 第三该解决方案必须是轻量化的解决方案。
通过不断地寻找,不断地对比,最终南航将目标聚焦在阿里巴巴开源解决方案Macaca上。
Macaca是一套完整的自动化测试解决方案,它的三个特性对南航极具吸引力:
1ã 它是跨端的解决方案(测试领域的创新之作),支持移动端和PC端,极大地释放人工成本,提高了工作效率(只需学习一套脚本工具);
2ã 它支持多种语言,Macaca由Node.js开发的,支持JS、Python、Java编写自动化脚本;
3ã 它是一个轻量化的开源项目。
南航落地Macaca
在落地Macaca之前,需要先部署如图所示的技术栈:Node.js用于部署Macaca;Gitlab&Gitlab Runner用于存储代码和测试用例;Slack用于团队的沟通协调;Reliable是配合Macaca使用的CI平台。
Macaca具体使用流程如下所示:开发人员首先将代码提交到Git仓库(Gitlab);然后Gitlab触发Webhook(使用*.yml脚本编写流程);Webhook触发业务任务,业务任务推到Gitlab Runner进行项目构建以及Build RPA包。
(接上图)RPA包会触发Reliable 平台的API,然后创建测试用例的任务,也就是说开发人员每提交一次代码或创建一次构建,都会生成一个测试用例的任务。
Reliable是一个分布式CI平台,Master会把测试任务分发到其他Slave执行(Slave客户端即Macaca客户端);客户端运行Macaca测试用例。
测试用例运行之后,会有两种情况发生:如果成功,则可以直接查看生成报告;否则会通过Slack通知开发人员测试失败,重新修改代码。
上图是测试过程总览,从图中可以看出:已经形成开发到测试的闭环。
上文提到Slack是一个IM平台,当然这里也支持钉钉。它的作用是:当测试用例失败时,可以通过IM平台提示测试用例哪里出现问题。
上图是简单的登录测试用例:输入用户名和密码,然后点击登录按钮。中间的图是Macaca测试用例的目录结构图,App目录中存放着项目构建成功RPA包;macaca-test目录存放着Macaca测试用例;具体测试用例的代码如右图所示,以行为驱动的方式开发。
Macaca中还提供了Inspector工具供用户直观、方便查找到想要选中的元素。图中右侧一栏提供的是XPS、ID、Name数据,用户通过Inspector工具寻找目标界面的元素。
南航选择Visual Studio Code作为常用的IDE。之所以选择Visual Studio Code,是因为它能够轻量地、方便地支持使用者Debug,用户可以根据自己喜好选择相应地调试工具。
上图是Reliable的界面。通过Reliable,用户可以查看测试用例和测试结果;并且Reliable天生与Macaca无缝衔接,这正式也是南航选择Macaca的原因之一。
最终的测试结果需要与南航的测试平台对接(Macaca产生的测试报告、测试结果数据在导入南航测试管理平台前需要进行数据转换),形成完整的测试流程。
总结来看,Macaca给南航带来的价值主要是两点:
- 成本投入、回收角度分析,仅考虑自动化测试脚本制作成本,第五轮测试执行后即可回收成本;
- 风险控制角度分析,首先测试报告自动生成,可以提高测试过程管理有效性;其次生产上提高质量,降低风险,减少缺陷流出的成本;此外,有利于测试资产传承,降低对测试人员业务熟练度的依赖性。
除此之外,Macaca还给南航带间接性收益:QA从原来的从人工操作转变成具备可编程的能力;开发人员从原来直接提交代码,到现在提交代码前需要通过Macaca UI单元测试等;Macaca的应用推动了南航工作流程和工作方式的演变。
Future
未来,为了推广Macaca,让Macaca被更多用户所接受,南航需要以下几个方向继续努力:
- 为了让Macaca运行更加稳定,需要建立私有的CNPM库;
- 基于Reliable的基础上,建立CI&CD平台;
- 大力推广DevOps,扩大自动化测试范围;
- 完善文档,回馈开源社区;
- 将H5端部署到Macaca中。