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分析示例

转载于:https://www.cnblogs.com/zln1021/p/6183894.html

使用MonkeyTest对Android客户端进行压力测试 自动化代码相关推荐

  1. Android设备网络压力测试

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

  2. 网络测试 android,Android设备网络压力测试

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

  3. android测试篇(四)android专项测试之压力测试

    前言 抄袭文章来源:Android App专项测试-压力测试篇 小伙伴们大家好,今天主要分享的主题是Android App专项测试.如何进行Android App专项测试压力测试呢?我们主要通过And ...

  4. Android客户端Monkey稳定性测试

    目录 Monkey优缺点 优点 缺点 Monkey命令 参数详解 日志分析 日常测试过程中,为了测试APP的稳定性及随机场景,不按照常规用户的思维进行操作APP,可选择使用Monkey进行随机测试.. ...

  5. android monkey压力测试(二)

    一.什么是Monkey 顾名思义,Monkey就是猴子,  Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试.  猴子什么都不懂, 只知道乱敲 通过Monkey程序模拟用户触摸屏幕.滑动T ...

  6. cpu压力测试 Android,Android App 压力测试方法(Monkey)

    一.为什么要开展压力测试 a.提高产品的稳定性:b.提高产品的留存率 二.什么时候开展压力测试 a.首轮功能测试通过后:b.下班后的夜间进行 三.7个基础知识(理论部分) 3.1 手动测试场景与自动测 ...

  7. android 适配测试,谈Android手机客户端的适配测试

    二.Android客户端的适配测试主要从几个方面覆盖 在测试中:我们需要尽量逼真用户的使用场景.作为产品的第一用户来使用来测试.适配测试:主要是从手机分辨率和系统版本两个方面入口:结合最开始我给大家看 ...

  8. 浅谈Android手机终端客户端的适配测试

    一.Android客户端为什么要进行终端适配测试 在正式开始讨论android客户端的适配测试之前,先提供一些数据给的大家参考一下. 下面是抽取android客户端在2月份的用户使用情况. [Andr ...

  9. 软件测试中的压力测试是什么?

    压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性.压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力,并确保软件在危急情况下不会崩溃.它甚至可以测试超出正常工作 ...

  10. 压力测试中存在的问题

    压力测试中存在的问题 (What) 什么是压力测试 软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分.软件压力测试的基本思路很简单: 不是在常规条件下运行手动或自动测试,而是在计 ...

最新文章

  1. Substance Painter实时角色制作视频教程
  2. 唐山一个葬礼上的豪华车队
  3. jquery tab插件
  4. java将图片转byte存入数据库_Java将byte[]转图片存储到本地的案例
  5. 至尊版影视双端app源码对接苹果CMS 带商城码支付
  6. 小米宣布新一轮组织架构调整,崔宝秋挂帅技术委员会
  7. 对多个有规律表进行更新剔重复操作的存储过程(up8000)
  8. 查找——顺序、二分法、斐波那契、插值、分块
  9. 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示,,,
  10. catia设计树_在CATIA目录树上**零件号原来这么简单!
  11. 《指数型组织》学习总结
  12. 服务器运行几年后搬迁,服务器搬迁之后的准备工作和应对
  13. 计算机保研厦大面试,保研其实不难:他们保研人大、厦大、山大,有这些经验,值得收藏!...
  14. Android系统开发篇(二) —— 建立Android系统开发环境之Ubuntu 20.04.4 LTS
  15. python京东抢购软件_福利来了,python 京东抢购茅台脚本(亲测可用)
  16. 《虎虎圆桌派》第一期全程回顾
  17. Tita绩效宝:绩效管理评语范例
  18. html怎么消除打印的进纸,打印机进纸打印故障解决秘方实例
  19. 二极管原理及相关特性
  20. 如何在VScode上配置Python开发环境【保姆级】

热门文章

  1. LINUX虚拟机安装增强功能
  2. 编译编译时,用不到的库,一定不要链接
  3. 解决办法:不在sudoers文件中此事将被报告
  4. java版本的RtpStream
  5. 解决办法:GLib-ERROR **: Creating pipes for GWakeup: Too many open files
  6. linux内存测试工具memtest,linux内存测试工具memtester使用
  7. c语言编程ppt免费下载,概述C语言编程.ppt
  8. java计算两点距离_Java 使用经度计算两点之间的距离?
  9. Memcache和Redis区别:
  10. 巴西发生矿坝决堤事故 外媒:90名受困者已救出