Python之小工具---Monkey测试

2,046 阅读3分钟

前两篇文章介绍了如何命令行进行Monkey测试和如何进行日志分析。

这篇介绍如何将Monkey测试平台化,实现:

1)自动安装待测试 apk

2)可以根据自己需要设置事件百分比,点击次数,事件循环次数

3)生成测试报告

4)生成日志文件

测试目的

对APP进行稳定性和性能测试,测试App是否会出现crash等异常,以此来判断其是否与机型适配,可以发现程序无响应问题和崩溃问题。

测试策略

进行压力测试时,throttle的值设定为500或者更小,一般都使用500毫秒的延迟事件。

进行单个apk的验收测试时,则使用单一apk且不忽略异常的命令执行

在进行单个apk的解决问题的测试时,则使用单一apk且忽略异常的命令执行,这样可以在一次执行的过程中发现应用程序中的多个问题。

测试分析

Monkey测试的初步分析方法,Monkey测试出现错误后,一般的差错步骤为以下几步:

1、 找到是monkey里面的哪个地方出错

2、 查看Monkey里面出错前的一些事件动作,并手动执行该动作

3、 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样

而一般的测试结果分析:

1、 ANR问题:在日志中搜索“ANR”

2、 崩溃问题:在日志中搜索“Exception”

对于详细分析monkey日志,将执行Monkey生成的log,从手机中导出并打开查看该log;在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。首先我们需要查看Monkey测试中是否出现了ANR或者异常, 然后我们要分析log中的具体信息,查看log中第一个Switch,主要是查看Monkey执行的是那一个Activity,譬如下面的log中,执行的是com.tencent.smtt.SplashActivity,在下一个swtich之间的,如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。

一、前置条件(环境准备)

1)安装java环境

地址:www.oracle.com/technetwork…

2)设置环境变量

#变量名:JAVA_HOME
#变量值:D:\Program Files (x86)\Java\jdk1.8.0_25(换成自己的jdk安装目录路径)
#变量名:CLASS_PATH
#变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
#找到path变量名—>“编辑”添加:
#变量名:PATH
#变量值:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
#cmd运行:java 或者javac运行无报错 安装成功

3)安装Android SDK

地址:developer.android.com/sdk/index.h…

PS :如果安装失败

更改host文件:

203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com

二、关于monkeyrunner

monkeyrunner:android SDK中自带的工具之一,此工具提供API可按制android设备或模拟器。monkeyrunner提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。

三个API:

    MonkeyRunner API:
              MonkeyRunner.waitForConnection()等待连接
             MonkeyRunner.sleep(8)            等待8秒
              MonkeyRunner.alert(message,title,okTitle) PC端弹框
              MonkeyRunner.input(message,..)            PC端输入
              MonkeyRunner.choice(message,choices,title)PC端选择
              MonkeyRunner.installPackage(path)         安装apk
    MonkeyDevice API:
              touch(x,y,type)                  点击事件
              type(message)                    输入字符串
              drag(start,end,duration,steps)  拖拽事件
              takeSnapShot()                   截屏

    MonkeyImage API:
              writeToFile(path,format)          保存截屏的图片
              getSubImage(rect)                 从截取的图像中截取某一块图像
              picture1.sameAs(picture1,percent) 两张截图的图片做出对比

三、为什么要编写脚本?

monkey命令只能有限做一些随机事件的压力测试。

1.需要预先连接好设备、安装好待测Apk。

2.无法做到无干预的循环。类似没人看着去测试一夜的情况。

3.对一些在测试情况下,各项状态的监控并不好。

4.那么,这些问题,其实都可以使用一个脚本来解决问题。