前言思想
自动化测试就是将人(测试人员、开发人员)用手、腿、耳朵、嘴做的每个动作,全部转换由程序进行,比如我们人类眼睛的图像识别、耳朵的音频识别、嘴上的音频输出,手上的触摸动作。
Android上的monkey测试为了什么
用于发现程序崩溃与ANR,提高程序的稳定性测试,只有这样才能让用户留下来,假设你用到一个总是崩溃的App,你的不爽,一定会发泄为卸载,所以稳定性测试是提高留存的必要手段,非常重要。
聊聊自动化测试的几个重要的元素
1、环境
执行自动化测试的环境,比如依赖的操作系统:Windows、Linux等等、依赖的程序:Python、bash、Android SDK
2、过程
执行测试的过程,比如monkey程序,它模拟人类的手去触摸屏幕(备注:你用脚我也不干预)
3、结果
收集测试程序、被测程序的日志,程序虽然结束了,它的使用过程必须要留痕。包括:文本日志、图片日志、视频日志,统称为log。 用于分析程序发生异常时的执行情况,执行了哪个指令,导致程序结束。
4、报告
针对测试过程的总结性过程,包括崩溃的次数、系统性的展示log信息等等
Monkey的自动化测试都需要做什么(需求分析)
分析测试人员进行Monkey测试的行为,分析手工测试的行为相当于自动化测试方案的需求评估,你不能错过任何一个手工动作,因为需要把每个手工动作全部使用自动化程序实现
一个测试人员执行monkey测试会做哪些事情呢?自己做一遍是最重要的,你可能记住每一个动作,如果对业务测试不熟悉,也可以跟踪一个测试人员。
考虑如何将测试人员的一个一个的手工动作变成由程序代替执行呢,让我们想想一个测试工程师做Monkey测试,他会做哪些事情??
1、环境准备
开发提交代码到远程仓库、Jenkins使用Git插件、Gradle插件构建出Apk、测试人员从产物平台拿到Apk、插上手机、开启手机开发者模式、adb devices确认是否连接手机、使用adb工具安装到手机上、从Launcher点击被测App的图标、输入账号、输入密码、点击登陆,然后还需要把人为授权的弹出点掉,这样一个apk环境准备好了
2、测试过程
通过命令行启动Monkey程序
3、结果
收集Monkey异常日志、打开异常日志,一行一行筛选有用的且无重复的崩溃(Native、Java)、然后将日志录入到bug管理系统并指定给开发、QQ或微信或面对面通知开发有个monkey的bug看一下
4、报告
它会把测试结论以某种形式展现给开发者
需求背景
1、monkey测试频繁的去做这些行为
2、能发现稳定性bug,说明有产出
3、非常消耗人力资源
实现目标:24小时无人工干预的Monkey程序,将上述动作全部自动化(程序),适用于Android、Ios
自动化monkey技术栈
1、计算机语言
python、shell、java、js、vue、html、css
2、外部工具(命令)
jenkins、git、tapd(jira)、gradle、monkey、adb、unicorn
3、自动化框架
UiAutomator
4、文件系统
读写文件、文件路径
5、网络
http、json
6、中间件服务
mysql、redis
7、通信
飞书API、邮件API
8、进程
进程间同步、进程间通信
9、框架
Flask、Vue
进程角度
1、主执行流进程
2、log分析进程
3、monkey进程
早期粗略计划
1、git pull master分支上的代码(可以利用gitlab的API,或者git的log,通过开发提交日志触发、添加特殊字符)这块都交给Jenkins
2、没有新提交的话什么也不做,有新提交的代码的话,Jenkins执行一个命令也行,比如就用curl命令行
3、Flutter支持(通过前端触发Jenkins打包),构建成功后(是否构建可以根据git tag决定),让Jenkins的job里给我的后端发一个请求,后端收到请求,从产物H5AI的服务里,获取最新的安装包,获取成功之后,通过adb安装到手机里,此时再用adb启动Uiautomator,执行登陆操作,登陆完之后把该获得的权限都点出来,通过Uiautomator全部获取,全部完事之后(给个5分钟吧),后端将Uiautomator的进程干掉,开始启动
可以省略为测试同学使用jenkins构建完App后,那么定时程序去检测目录,如果有新的目录,然后将安装包安装到手机上(消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ)
4、安装到手机apk(这里的容错是,先卸载原先的App)
5、启动Appium服务,执行登陆、权限等步骤的操作(如果账户权限相关的,请后端支持白名单,绕过验证码)App处于可用状态(然后可以开启一个守护进程、利用Uiautomator,处理弹窗等影响Monkey执行的异常业务逻辑,这个由Monkey来点击既可以)
6、Monkey执行,Monkey日志(标准输出)存储在Mac本地文件中,其中的崩溃日志、ANR日志从Monkey中提取出来(开启bugreport,使用bugreport的日志文件进行分析),每个都要单独写到一个文件里
7、ANR日志拿到的话,也要单独先提取出来放到一个目录当中
8、上传线程监听崩溃目录、ANR目录是否有文件,有的话,直接将目录文件都存放到云盘中
9、自动提交bug系统,POST到TAPD中
这里面涉及到一个Exception过滤重复的问题,每次提交到TAPD之前,与上传过的Exception做对比,如果一样,不作提交,上传到TAPD崩溃日志、ANR日志,需要增加容错去重(别重复的日志总是上传)
10、Monkey执行完毕,发出报告(有发现的问题才发,没有不发)
总结
1、完全无需人干预的24小时Monkey自动化,整个需求很复杂,我没有写所有的步骤,细节很多,最后的目标是:利用程序代替执行Monkey的所有人力动作
2、monkey发现崩溃,用于帮助产品提高留存
3、同时由于采用自动化程序执行,可以节约人力资源,为公司省钱