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 >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、自动化实例

 #coding=utf-8

 '''
Create on 2014-12-24
python 2.7 for window
@auther: tangdongchu
'''
import os
import sys
import time class monkeyTest(): def __init__(self):
""" init """ #monkey命令,packageName包名,interval间隔时间单位ms ,frequency执行次数
def monkeyApp(self,packageName,interval,frequency):
try:
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')
except Exception,e:
print e #导出日志
def copyErrorLog(self):
try:
anr = "E:\\monkeylog\\anr"
if not os.path.isdir(anr):
os.makedirs(anr)
dontpanic = "E:\\monkeylog\\dontpanic"
if not os.path.isdir(dontpanic):
os.makedirs(dontpanic)
tombstones = "E:\\monkeylog\\tombstones"
if not os.path.isdir(tombstones):
os.makedirs(tombstones)
bugreports = "E:\\monkeylog\\bugreports"
if not os.path.isdir(bugreports):
os.makedirs(bugreports)
os.popen("adb pull /data/anr E://monkeylog//anr",'r')
os.popen("adb pull /data/dontpanic E://monkeylog//dontpanic",'r')
os.popen("adb pull /data/tombstones E://monkeylog//tombstones",'r')
os.popen("adb pull /data/data/com.android.shell/files/bugreports E://monkeylog//bugreports",'r')
except Exception,e:
print e def main():
print """""" if __name__=="__main__": packageName = 'ctrip.android.view'
myApp = monkeyTest()
myApp.monkeyApp(packageName,500,100)
#判断是否执行完成,执行完成后导出日志
for i in range(1, 1000000):
monkeylog = open('E:\monkeylog\monkeyScreenLog.log')
try:
temp = monkeylog.read( )
finally:
monkeylog.close( )
if temp.count('Monkey finished')>0:
myApp.copyErrorLog()
break
else:
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分析示例

详细log分析参考

使用MonkeyTest对Android客户端进行压力测试的更多相关文章

  1. 使用MonkeyTest对Android客户端进展压力测试

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试. 先来看一条 ...

  2. 使用MonkeyTest对Android客户端进行压力测试 自动化代码

    1.monkey命令简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序 ...

  3. Android设备网络压力测试

    网络测试的几个维度: 网络的性能 带宽:通过TCP测试来量度 时延:用ping命令量度 数据报丢失:用Iperf UDP测试来量度 Jitter(延时变化):用Iperf UDP测试来量度 信号强度( ...

  4. Android命令Monkey压力测试,详解

    一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出 ...

  5. 转:Android命令Monkey压力测试,详解

    停止Monkey命令: 1. ps命令  查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ps | grep monkey 返回来的第一个数字,即是monkey的进 ...

  6. Android Monkey压力测试

    Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monkey会发送伪随机的用户事件流,适合对app做压力测试. 1为什 ...

  7. Android APP压力测试-Monkey

    压力测试-Monkey学习 Monkey测试特点 什么是Monkey test? 如其名,像猴子一样,虽然什么都不懂,但是可以乱点一通,可以理解为压力测试.在规定的时间或次数范围内做任何随机的操作,随 ...

  8. Android自动化压力测试图解教程——Monkey工具

    [置顶] Android自动化压力测试图解教程--Monkey工具 标签: 测试androidprofiling工具测试工具文档 2012-04-01 10:16 38185人阅读 评论(10) 收藏 ...

  9. Android自动化压力测试图解教程——Monkey工具 (转)

    有时候我们需要对一个软件进行压力测试,检查该软件的性能.如果是人工进行测试的话,效率会低很多,而且会比较枯燥.这时,Android中的一个命令行工具Monkey就可以为我们减轻很多重复而又繁琐的工作. ...

随机推荐

  1. poj1330-----------关于公共祖先的问题

    关于公共祖先的问题分类: 这类问题有多种解法和类型,根据题目给出的信息去判断使用哪一种 1.给你树,只支持从父亲找儿子,不支持儿子找父亲,最后要求最近公共祖先,使用dfs或者分治 2.支持儿子找父亲, ...

  2. 前端组件化Polymer入门教程(7)——Local DOM

    DOM元素的创建和管理被称为本地DOM(Local DOM) 本地DOM模板 如果你需要使用本地DOM,你们需要用<dom-module>并指定一个相匹配的ID. <dom-modu ...

  3. Java运行时,指定程序文件的编码

    在命令行cmd里面运行 java -jar test.jar的时候,发现里面执行的汉字发生乱码.原来指定的是UTF-8. 解决如下: java -Dfile.encoding=UTF-8 -jar - ...

  4. 解决wamp 3.0.6 访问路径出现 403 错误

    <VirtualHost *:80> ServerName localhost DocumentRoot e:/wamp64/www #your local dir path <Di ...

  5. Linux内核升级导致无法启动,Kernel panic - not syncing Unable to mount root fs on unknown block(0,0)

    问题原因:内核的某次升级,导致系统无法启动. 首先进入recovery模式:引导界面选择-->Ubuntu高级-->出现的选项中选择能够启动的recovery模式(几个内核版本分别试一下) ...

  6. Oracle10g 64位 在Windows 2008 Server R2 中的安装 解决方案

    背景: 操作系统Windows 2008 Server R2 要安装Oracle10g 64位版本 安装时出现如下错误: 检查操作系统版本:必须是5.0,5.1,5.2 or 6.0.实际为6.1 未 ...

  7. SpringBoot入门 (十一) 数据校验

    本文记录学习在SpringBoot中做数据校验. 一 什么是数据校验 数据校验就是在应用程序中,对输入进来得数据做语义分析判断,阻挡不符合规则得数据,放行符合规则得数据,以确保被保存得数据符合我们得数 ...

  8. Jmeter接口测试动态传参——动态获取token值

    先添加一个线程组,然后在线程组下添加HTTP Request 环境变量: 线程组下添加User Defined Variables 调用变量:${变量名} 添加结果树: 记录登录后的token: 获取 ...

  9. 阿里巴巴java手册示例

    package com.led.daorumysql; /** * @Description:alibaba java development manual * @author 86157 * */ ...

  10. 基于Webkit的浏览器关键渲染路径介绍

    关键渲染路径概念 浏览器是如何将HTML.JS.CSS.image等资源渲染成可视化的页面的呢?本文简单介绍一下渲染过程中涉及到的关键步骤. 该过程分为四步:模型对象的构建.渲染树构建.布局.绘制. ...