monkeytest是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了monkeytest是啥意思相关的知识,希望对你有一定的参考价值。

参考技术A 简介monkey testing,
也有人叫做搞怪测试。
  就是用一些稀奇古怪的操作方式去测试被测试系统,以测试系统的稳定性。monkey test,一般指这样的测试活动,用毫无规律的指令或操作使用被测系统,观察系统的稳定性和容错性能。原理Monkey测试是android自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。 当Monkey程序在模拟器或设备运行的时候,如果用户触发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件.本回答被提问者和网友采纳
参考技术B   一、简介
  Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:
  基本配置选项,如设置尝试的事件数量
  运行约束选项,如设置只对单独的一个包进行测试
  事件类型和频率
  调试选项
  在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理(自动停止):
  如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
  如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
  如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。
  按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件

  二、测试准备
  Monkey test前必须先进入android设备的adb shell(Android SDK环境配置不在此描述,网上有很多)步骤如下:
  1. 开始—>运行—>cmd
  2. usb连接手机,输入 adb shell 命令,待出现 即可输入以下内容
  3. 进入手机后,输入相应的monkey命令即可测试

  三、基本命令格式
  adb shell monkey –p 程序包 –v 测试次数
  比如“adb shell monkey –p com.htc.Weather –v 20000”意思是对com.htc.Weather 这个程序包单独进行一次20000次的monkey测试
  其中程序包名称可以在串口终端这句命令获得:ls data/data 显示所有程序包

  四、测试Log获取
  用Monkey test测试,为了方便分析问题,可以在命令monkey命令后面加上 “|logcat -v time”,这样就能边测试边打印Log(记得用终端保存Log文本)例如:
  adb shell monkey –p com.htc.Weather –v 20000|logcat -v time
  但是这个组合在monkey测试完成后,logcat仍然在执行,测试时需要注意。
  如果测试monkey碰到crash或者anr(程序强制性退出或不响应)现象时,在抓取log的同时需要提供traces.txt,步骤如下:
  1. 测试版本需要具备root权限
  2. 进入data/anr目录下面
  3. 将traces.txt文件拷贝到TF卡中,然后拷贝出来发给软件分析即可

使用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是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

Monkey学习(转载)

smart monkey 的意思是啥

Monkey

fly monkey majik 中文意思

monkey压力测试基本使用及要求

如何进行Monkey Test