背景
首先让我们举几个业务上的常见问题,比如:
1、由于每次功能回归都不太可能把所有的用例都执行完,所以一般团队倾向于优先执行新功能的测试用例,老功能的用例如果没时间就不会执行,哪怕是有专门的人力写UI自动化脚本,也不太会覆盖所有的老功能回归用例,所以偶尔会发生由于某次变更导致APP某个不常使用的老页面发生崩溃或者UI展示有异常的问题;
2、由于用户的设备环境复杂多样,所以APP某个页面在不同机型上的表现很有可能发生不一致的现象,或者是在不同的网络环境下会发生非预期崩溃等异常问题;
问题
传统的基于用例维护方式的自动化测试手段已经无法满足产品快速迭代下的质量保障需求,一方面是因为大部分团队中熟练掌握自动化框架的测试开发工程师太少,导致用例的维护成本太高、稳定性太差,很难达到提效的目的。
另外一方面是因为业务中需要测试的内容和场景实在是太多了,手工测试根本无法充分覆盖,比如:内存泄漏、稳定性测试、兼容性测试、弱网测试等等,其实很多页面本身并不复杂,但是如果要靠手工或者编写自动化用例的方式去覆盖,同一个入口的不同路径又太多,实现成本非常高,如果不去做的话,又很容易发生漏测。
思考及改进
基于以上问题,我们需要进行合理的分层测试设计,比如:
1、UI自动化测试覆盖核心业务场景和流程,而且主要专注于UI和功能跳转是否正常的验证,接口的验证交给接口自动化测试去做;
2、手工测试主要覆盖新功能的测试、探索性的测试以及各种专项测试;
3、自动遍历测试主要覆盖那些人工无法覆盖或者覆盖起来成本非常高的场景,比如内存泄漏检测、基础功能回归、兼容性测试、弱网测试等;
常用的自动化遍历工具
目前市面上开源或者半开源的自动化遍历工具也有比较多的选择,比如:
Google 原生Monkey
Android:https://developer.android.com/studio/test/monkey
Google的App Crawler
Android:https://developer.android.com/training/testing/crawler
阿里 Macaca的NoSmoke
双端:https://macacajs.github.io/NoSmoke/zh/
zhangzhao的Maxim
Android:https://github.com/zhangzhao4444/Maxim
zhangzhao的Fastmonkey
iOS:https://github.com/zhangzhao4444/Fastmonkey
字节的Fastbot
Android:https://github.com/bytedance/Fastbot_AndroidiOS: https://github.com/bytedance/Fastbot_iOS
SwiftMonkey
iOS:https://github.com/zalando/SwiftMonkey