手把手带你,用Python写一个Monkey自动化测试脚本!!!
一、为什么需要一个测试脚本?
之前讲解了 Android Monkey 命令的使用方式,今天趁着还热乎就手把手用 Monkey 写一个压力测试的脚本。还不了解什么是 Monkey 的,可以看看之前的文章,《关于 Monkey ,你所需要知道的,都在这里!!!》。
Monkey说到底其实就是一段命令,只能在有限的范围内做一些随机事件的压力测试。可以很明显看到它的一些缺点:
- 前期准备工作太多,需要把设备准备好、安装好待测Apk。
- 无法做到无干预的循环。类似没人看着去测试一夜的情况。
- 对一些在测试情况下,各项状态的监控并不好。
那么,这些问题,其实都可以使用一个脚本来解决问题。
Monkey 命令其实就是在命令行中执行的命令,所以脚本语言基本上都可以完成这个任务,这里选择主流的 Python 来完成。
二、如何设计压测脚本
既然是一个完整的脚本,那么当然需要满足一些最基本的需求。
包括:
- 可以自动安装待测试 apk。
- 可以循环执行脚本,并且每次都退出 App 重新执行。
- 在执行完成之后,可以输出测试报告。
- 变动的参数,可以让测试人员自行配置。
一个简单的测试脚本,包括这些基本上就足够了。
三、动手写脚本
编写完成之后,Python 的项目结构大概是这样子的。
项目的结构大概如下:
- apk 目录:用于存放待测试的 Apk。
- bugreport_out 目录:用于存放测试完成输出的报告。
- .config:压力测试的配置信息文件。
- chkbugreport.jar:输出测试报告的工具。
- runmonkey.py:真正需要执行的 Python 脚本。
- start.bat:为测试准备一个点击就可以执行的 bat 脚本。
了解了项目的结构之后,就可以开始编写 Python 脚本了。
1、编写配置文件和读取配置文件
首先看看 .config 配置文件。
在配置文件里,主要配置待测试的设备 ID、循环执行次数,和每次循环的时候点击的次数。
这样设计,基本上可以通过 execcount 和 monkeyclickcount 两个参数,配置所需要执行多久的一个压测方案。
接下来就需要一个方法去读配置文件。
2、安装待测试apk
一般测试都是会测试同一个apk产品,所以这里写死apk的文件名。直接通过os.popen()这个 Python 的方法执行 adb 脚本。
3、杀掉待测app
为了让每次循环都是新的一个测试任务,保持测试环境的赶紧,需要一个方法在每次循环之前,杀掉之前正在运行的待测 App。
4、生成测试报告
生成测试报告主要依赖 chkbugreport.jar 这个工具,它会根据 bugreport 获得的文件内容,生成测试报告。
bugrepor t的用法:
adb shell bugreport > .\bugreport.txt
而 chkbugreport.jar 是一个 java 编写的工具,直接通过java -jar 执行即可
完整的代码如下:
5、开始执行Monkey脚本
做完准备工作,就需要一个方法来执行我们配置好的 Monkey 脚本。
各项参数的配置,不明白的看看昨天的文章吧。
6、开始调用准备好的方法
准备工作已经完成,接下来将这些准备好的方法,组合起来,用一个 for 循环完成脚本的执行。
四、为测试人员准备一个bat
做完这些,基本上就算是把主要功能完成了。执行下面的命令,就可以跑起来了。
python runmonkey.py
但是终归这个脚本是要给测试用的,最好还是提供一个点击可用的bat脚本。
新建一个 start.bat 文件,把上面的命令保存进去就行。
下面看看执行起来的样子。
这里配置了循环三次,所以最终从 Log 中可以看到,确实执行三次之后,生成测试报告,并且退出测试。
五、生成的测试报告
chkbugreport.jar 可以通过生成的 bugreport 的内容,生成我们需要的测试报告。
从上面的截图可以看到,其实它会是一个网页,输出的内容非常的齐全。
六、多说两句
其实这个 Monkey 的压力测试脚本,已经满足测试的基本要求。但是实际上,生成的测试报告,不太好查看。通常封装成成熟的产品的App,都会集成第三方Bug监控的服务,例如:Bugly、友盟什么的。所以可以不依赖 bugreport 生成的测试报告,直接在打测试包的时候,生成一个测试渠道的 apk ,用它来测试,这样在第三方服务提供的网站上,可以清晰看到测试的报告。
七、完整的Demo