Android之Monkey自动化测试 压力测试 随机测试

前言

使用Monkey测试项目时各模块均出现crash问题,相应得到解决。

特整理此文档,供开发自测使用,不足之处欢迎指正补充。


一、简介 

Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:  

l 基本配置选项,如设置尝试的事件数量。  

l 运行约束选项,如设置只对单独的一个包进行测试。  

l 事件类型和频率。  

l 调试选项。  

Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:  

l 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。  

l 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。  

l 如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。  

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。  

 

二、Monkey特征

MonkeyAndroid中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。

 

l 测试的对象仅为应用程序包,有一定的局限性。

l Monky测试使用的事件流数据流是随机的,不能进行自定义。

l 可对MonkeyTest的对象,事件数量,类型,频率等进行设置。


三、Monkey基本用法 

可以通过开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在模拟器/设备环境中,所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。基本语法如下: 

 

$ adb shell monkey [options]   

 

如果不指定optionsMonkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件: 

 

$ adb shell monkey -p your.package.name -v 500

 

四、Monkey初步分析方法

 

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

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

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

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

 

一般的测试结果分析:

l ANR 问题:在日志中搜索“ANR”。

l 崩溃问题:在日志中搜索“Exception”。


五、Monkey详细分析日志

 

将执行 Monkey 生成的 log,从手机中导出并打开查看该 log

在 log 的最开始都会显示 Monkey 执行的 seed 值、执行次数和测试的包名。

首先我们需要查看 Monkey 测试中是否出现了 ANR 或者异常,具体方法如上述。

然后我们要分析 log 中的具体信息,方法如下:

查看log中第一个 Switch,主要是查看 Monkey 执行的是那一个 Activity,譬如下面的 log 中,执行的是com.tencent.smtt.SplashActivity,在下一个 swtich 之间的,如果出现了崩溃或其他异常,可以在该 Activity 中查找问题的所在。

 

:Switch:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.tencent.smtt/.SplashActivity;end

 

// Allowing start of Intent {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]cmp=com.tencent.smtt/.SplashActivity } in package com.tencent.smtt

 

在下面的 log 中,Sending Pointer ACTION_DOWN 和 Sending Pointer ACTION_UP 代表当前执行了一个单击的操作;

 

Sleeping for 500 milliseconds 这句 log 是执行Monkey测试时,throttle 设定的间隔时间,每出现一次,就代表一个事件。

 

SendKey(ACTION_DOWN) //KEYCODE_DPAD_DOWN   代表当前执行了一个点击下导航键的操作;

 

Sending Pointer ACTION_MOVE     代表当前执行了一个滑动界面的操作。

 

:Sending Pointer ACTION_DOWN x=47.0 y=438.0

 

:Sending Pointer ACTION_UP x=47.0 y=438.0

 

Sleeping for 500 milliseconds

 

:SendKey (ACTION_DOWN): 20   //KEYCODE_DPAD_DOWN

 

:SendKey (ACTION_UP): 20   //KEYCODE_DPAD_DOWN

 

Sleeping for 500 milliseconds

 

:Sending Pointer ACTION_MOVE x=-2.0 y=3.0

 

:Sending Pointer ACTION_MOVE x=4.0 y=-3.0

 

:Sending Pointer ACTION_MOVE x=-5.0 y=-3.0

 

:Sending Pointer ACTION_MOVE x=3.0 y=4.0

 

:Sending Pointer ACTION_MOVE x=-4.0 y=1.0

 

:Sending Pointer ACTION_MOVE x=-1.0 y=-1.0

 

:Sending Pointer ACTION_MOVE x=-2.0 y=-4.0

如果 Monkey 测试顺利执行完成,在 log 的最后,会打印出当前执行事件的次数和所花费的时间 // Monkey finished 代表执行完成。Monkey 执行中断,在 log 的最后也能查看到当前已执行的次数。Monkey 执行完成的 log 具体如下:

Events injected: 6000

 

:Dropped: keys=0 pointers=9 trackballs=0 flips=0

 

## Network stats: elapsed time=808384ms (0ms mobile, 808384ms wifi, 0ms not connected)


更多资讯请关注本博客!点击进入:来自星星的礼丶精品屋

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值