使用MonkeyTest对Android客户端进行压力测试 自动化代码
1、monkey命令简介
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。
先来看一条monkey命令
adb shell monkey -p ctrip.android.view --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100000>e:\monkeylog\monkeyScreenLog.log
这条monkey命令是指:在ctrip.android.view中产生10万次伪随机操作(包括触摸、按键、手势等),每次间隔500ms。
2、monkey命令参数说明
-s
伪随机数生成器的 seed 值。
示例: -s 600(如果用相同的seed值再次运行monkey,它将生成相同的事件序列。)
--throttle
在事件之间插入固定延迟。
示例: --throttle 500(毫秒)
-p
如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。
如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此
同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个 包,需要使用多个
-p选项,每个-p选项只能用于一个包。
示例:-p ctrip.android.view
--kill-process-after-error
通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系 统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之 后,简单地保持在最后的状态。
--ignore-timeouts
通常,当应用程序发生任何超时错误(如“Application Not Responding”对 话框)时,Monkey将停止运行。如果设置此选项,Monkey将继 续向系统发送事件,直到计数完成。
--ignore-security-exceptions
通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将 停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。
-v
命令行的每一个 -v 将增加反馈信息的级别。 3个-v代表最详细的日志级别。
示例:-v -v -v 100(数字100: 表示测试事件数)。
详情请参考:monkey命令参数
3、自动化实例

1 #coding=utf-8
2
3 '''
4 Create on 2014-12-24
5 python 2.7 for window
6 @auther: tangdongchu
7 '''
8 import os
9 import sys
10 import time
11
12 class monkeyTest():
13
14 def __init__(self):
15 """ init """
16
17 #monkey命令,packageName包名,interval间隔时间单位ms ,frequency执行次数
18 def monkeyApp(self,packageName,interval,frequency):
19 try:
20 os.popen("adb shell monkey -p %s --throttle %s --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v %s >e:\monkeylog\monkeyScreenLog.log" % (packageName, interval, frequency),'r')
21 except Exception,e:
22 print e
23
24 #导出日志
25 def copyErrorLog(self):
26 try:
27 anr = "E:\\monkeylog\\anr"
28 if not os.path.isdir(anr):
29 os.makedirs(anr)
30 dontpanic = "E:\\monkeylog\\dontpanic"
31 if not os.path.isdir(dontpanic):
32 os.makedirs(dontpanic)
33 tombstones = "E:\\monkeylog\\tombstones"
34 if not os.path.isdir(tombstones):
35 os.makedirs(tombstones)
36 bugreports = "E:\\monkeylog\\bugreports"
37 if not os.path.isdir(bugreports):
38 os.makedirs(bugreports)
39 os.popen("adb pull /data/anr E://monkeylog//anr",'r')
40 os.popen("adb pull /data/dontpanic E://monkeylog//dontpanic",'r')
41 os.popen("adb pull /data/tombstones E://monkeylog//tombstones",'r')
42 os.popen("adb pull /data/data/com.android.shell/files/bugreports E://monkeylog//bugreports",'r')
43 except Exception,e:
44 print e
45
46 def main():
47 print """"""
48
49
50 if __name__=="__main__":
51
52 packageName = 'ctrip.android.view'
53 myApp = monkeyTest()
54 myApp.monkeyApp(packageName,500,100)
55 #判断是否执行完成,执行完成后导出日志
56 for i in range(1, 1000000):
57 monkeylog = open('E:\monkeylog\monkeyScreenLog.log')
58 try:
59 temp = monkeylog.read( )
60 finally:
61 monkeylog.close( )
62 if temp.count('Monkey finished')>0:
63 myApp.copyErrorLog()
64 break
65 else:
66 time.sleep(2)

以上做到了自动执行monkey命令,并在monkey执行完成后将日志导出到PC以供分析。
4、如何通过日志定位问题
Android平台应用程序可能产生以下四种Crash:
App层:
1、Force Close Crash
2、ANR Crash
Native层:
3、Tombstone Crash(Native Crash)
Kernel层:
4、Kernel Panic
主要Log文件说明
anr目录:从手机/data/anr导出的日志,保存发生anr crash 时的相关信息;
dontpanic目录:从手机/data/dontpanic/导出的日志,保存发生Kernel Panic时的相关信息;
Tombstone目录:从手机/data/tombstones/导出的日志,保存发生Tombstone Crash时的错误信息;
dropbox目录:从手机/data/tombstones/导出的日志,经过dropbox服务截取的部分tombstones错误信息;
bugreports.log:从手机data/data/com.android.shell/files/bugreports导出的日志,保存发生异常时的相关系统信息,也可以通过adb shell bugreport命令提取;
MonkeyScreenLog.Log:保存Monkey测试过程、应用层错误信息,发生Native Crash时,在此文件也会有记录;
LOG分析方法
1、在MonkeyScreen.Log日志文件搜索关键词“Fatal”、“Crash”、“ANR”定位到发生Crash的详细堆栈信息,通过上下文初步判断发生问题的时间,进程pid等
2、检查dropbox目录下是否有相关crash日志信息,主要关注是否有以下4类crash错误信息:data_app_wtf,data_app_anr,data_app_crash,system_server_watchdog
LOG分析示例

使用MonkeyTest对Android客户端进行压力测试 自动化代码的更多相关文章
- 使用MonkeyTest对Android客户端进展压力测试
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试. 先来看一条 ...
- 使用MonkeyTest对Android客户端进行压力测试
目录 monkey命令简介 monkey命令参数说明 自动化实例 如何通过日志定位问题 1.monkey命令简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它 ...
- Android设备网络压力测试
网络测试的几个维度: 网络的性能 带宽:通过TCP测试来量度 时延:用ping命令量度 数据报丢失:用Iperf UDP测试来量度 Jitter(延时变化):用Iperf UDP测试来量度 信号强度( ...
- Android命令Monkey压力测试,详解
一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出 ...
- 转:Android命令Monkey压力测试,详解
停止Monkey命令: 1. ps命令 查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ps | grep monkey 返回来的第一个数字,即是monkey的进 ...
- Android Monkey压力测试
Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试. 1为什 ...
- Android APP压力测试-Monkey
压力测试-Monkey学习 Monkey测试特点 什么是Monkey test? 如其名,像猴子一样,虽然什么都不懂,但是可以乱点一通,可以理解为压力测试.在规定的时间或次数范围内做任何随机的操作,随 ...
- Android自动化压力测试图解教程——Monkey工具
[置顶] Android自动化压力测试图解教程--Monkey工具 标签: 测试androidprofiling工具测试工具文档 2012-04-01 10:16 38185人阅读 评论(10) 收藏 ...
- Android自动化压力测试图解教程——Monkey工具 (转)
有时候我们需要对一个软件进行压力测试,检查该软件的性能.如果是人工进行测试的话,效率会低很多,而且会比较枯燥.这时,Android中的一个命令行工具Monkey就可以为我们减轻很多重复而又繁琐的工作. ...
随机推荐
- [工具开发] Perl 爬虫脚本--从美国国家漏洞数据库抓取实时信息
一.简介 美国国家漏洞数据库收集了操作系统,应用软件的大量漏洞信息,当有新的漏洞出现时,它也会及时发布出来. 由于信息量巨大,用户每次都需要到它的网站进行搜索,比较麻烦.如果能有个工具,每天自动分析它 ...
- 黄聪:在WordPress后台文章编辑器的上方或下方添加提示内容
WordPress 3.5 新增了一对非常有用的挂钩,可以快速在WordPress后台文章编辑器的上方或下方添加提示内容,下面是一个简单的例子,直接将代码添加到主题的 functions.php 文件 ...
- C#实现局域网文件传输
网络通信一般都是通过Socket进行的,称为进程通信机制,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄. 先学习一下socket基本原理: socket原理: ...
- 【JavaScript】允许IE8使用placeholder
var placeholder = function ($element) { var $ = window.jQuery; var version = parseFloat($.browser.ve ...
- *(volatile unsigned long *) 语法
#define GPJ2CON (*(volatile unsigned long *) 0xE0200280) 开始对于上面的语法不太理解,但通过拆分,我们可以看的更明白: 1.(unsigned ...
- Liferay中SQL打印参数
XX\tomcat-7.0.42\webapps\ROOT\WEB-INF\classes\log4j.properties log4j.rootLogger=INFO, CONSOLE log4 ...
- Liferay中actionURL能够执行后台方法 ,但是页面不跳转问题解决方案
在学习liferay的过程中,遇到了这么一个问题,actionURL能够执行后台方法 ,但是页面不跳转,以下是两种解决方案: 方案1(不推荐此种办法): 强制将页面重定向. 在actionURL执行的 ...
- IDEA Community(社区版) 使用Maven创建Web工程 并部署tomcat
由于IDEA社区版(Community)无法直接New一个Web Appplication 所以要使用maven来创建 1.创建一个Project 2. 3. 4.这里在Properties中添加一个 ...
- 为什么选择centos,而不是Dibian、Ubuntu【转】
我们运行着一些全球最大的互联网的营运,因此我们对可靠性和稳定性非常重视,是我们的第一要务.为此,我们只使用Linux来支撑顾客的系统.但是,我们应该使用哪一个Linux的发行版?答案是,CentOS. ...
- JAVA 回调
一.定义 回调就是把函数指针做为参数传入,如函数A做为参数传入函数B,由B函数决定何时.何地调用函数A, function A() function B(A) { ...