`
7090
  • 浏览: 272949 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android monkey跟monkeyrunner研究

 
阅读更多
最近研究了Android自带的测试工具monkey 跟 monkeyrunner。
monkey主要应用在压力和可靠性测试上,运行该命令可以随机地向目标程序发送各种模拟键盘事件流,并且可以自己定义发送的次数,以此观察被测应用程序的稳定性和可靠性,应用起来也比较简单,记住那几个命令就行了。而monkeyrunner呢,相比之下会强大一些,它主要可应用于功能测试,回归测试,并且可以自定义测试扩展,灵活性较强,并且测试人员可以完全控制。

monkey工具:

基本语法如下:

$ adb shell monkey [options] <event-count>

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

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


一些常用的参数信息:
-v
命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。

约束限制
-p <allowed-package-name>
如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 -p选项,每个-p选项只能用于一个包。

Monkey实例测试
Windows下(注:2—4步是为了查看我们可以测试哪些应用程序包,可省略):

1、 通过eclipse启动一个Android的emulator

2、 在命令行中输入:adb devices查看设备连接情况

C:\Documents and Settings\Administrator>adb devices

List of devices attached

emulator-5554   device

3、 在有设备连接的前提下,在命令行中输入:adb shell 进入shell界面

C:\Documents and Settings\Administrator>adb shell

#

4、 查看data/data文件夹下的应用程序包。注:我们能测试的应用程序包都在这个目录下面

C:\Documents and Settings\Administrator>adb shell

如:

com.android.htmlviewer
com.android.settings
com.android.netspeed
com.android.providers.userdictionary
com.android.browser
com.android.contacts
com.android.alarmclock





5.在其中找到我们需要测试的包名com.marshalchen.MonkeyTest1



6、 以com.marshalchen.MonkeyTest1 作为对象进行MonkeyTest

#monkey -p com.marshalchen.MonkeyTest1 -v 500

其中-p表示对象包 –v 表示事件数量

运行过程中,Emulator中的应用程序在不断地切换画面。

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

如:Sending Pointer ACTION_DOWN x=35.0 y=259.0
:Sending Pointer ACTION_UP x=195.0 y=259.0
:Sending Pointer ACTION_DOWN x=295.0 y=223.0
:Dropped: keys=0 pointers=0 trackballs=0 flips=0
等等信息。


MonkeyRunner 使用

一、什么是MonkeyRunner
   monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
monkeyrunner工具与monkey工具并无关联。monkey工具直接运行在设备或模拟器的adbshell中,生成用户或系统的伪随机事件流。而monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。

monkeyrunner工具为Android测试提供了以下特性:
1.多设备控制:monkeyrunner    API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。       
2.功能测试:    monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。       
3.回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。   
4.可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subpress模块来调用如adb这样的Android工具。
   
    您还可以向monkeyrunner API中添加您自己的类。
    monkeyrunner工具使用Jython(使用Java编程语言的一种Python实现)。Jython允许monkeyrunnerAPI与Android框架轻松的进行交互。使用Jython,您可以使用Python语法来获取API中的常量、类以及方法。

二、图形化记录与回放
monkeyrunner monkey_recorder.py

#coding=utf-8

from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder
# 里面添加你的真机的名字
device = mr.waitForConnection(5,"emulator-5554")
recorder.start(device)


设备名称可以在命令行中输入adb devices获得





另外写了2个脚本,分别用于启动模拟器跟python脚本
@echo off 
echo ====================================================
echo wait emulator start 
echo ====================================================


start emulator -avd a4.3 

pause 

echo pause
echo wait emulator started

start monkeyrunner D:/MonkeyRunner.py



#coding=utf-8

import sys,time,os

# Imports the monkeyrunner modules used by this program  
from com.android.monkeyrunner import MonkeyRunner as mr  
from com.android.monkeyrunner import MonkeyDevice as md  
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder

# Connects to the current device, returning a MonkeyDevice object  
print("wait for Connect device") 
device = mr.waitForConnection()  

recorder.start(device)  

if not device:  
    print >> sys.stderr,"fail"  
    sys.exit(1)  


# install apk return boolean value to judge wheter apk installed ok
#device.installPackage('D:/tmp/installedApk.apk')

# sets a variable with the package's internal name  
package = 'com.clovegame.demogame'  
  
# sets a variable with the name of an Activity in the package  
activity = 'com.clovegame.demogame.MainActivity'  
  
# sets the name of the component to start  
runComponent = package + '/' + activity  
  
# Runs the component  
#device.startActivity(component=runComponent)  
  
#wait for a monment, 5s
mr.sleep(5)

# Presses the Menu button  
print("press menu") 
#device.press('KEYCODE_MENU', md.DOWN_AND_UP)  
  

# default folder name to save snapshot  
snapshot = 'D:/tmp/' 


#time str
t = time.strftime("%Y-%m-%d-%X",time.localtime())
t = t.replace(":","-")

devicename = "E"

#screenshot
#if imgsavetofile=='' : 
imgsavetofile = snapshot+devicename+'-'+t+'.png'

if not os.path.exists(snapshot) :
	os.mkdir(snapshot)
		
print 'snapshot image file: ' + imgsavetofile

mr.sleep(3)
# Takes a screenshot  
result = device.takeSnapshot()  
  
#This step is very important!
mr.sleep(3)
  
# Writes the screenshot to a file  
result.writeToFile(imgsavetofile,'png')  

'''

'''




EasyMonkeyDevice的相关类,已经可以利用控件的id来进行交互,同时模拟系统按键之类的,从这个角度来说,相比较于游戏,monkeyrunnner更合适android app应用的测试

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice        
    from com.android.monkeyrunner.easy import EasyMonkeyDevice       
    from com.android.monkeyrunner.easy import By            
    device = MonkeyRunner.waitForConnection()      
    easy_device = EasyMonkeyDevice(device)       
    easy_device.startActivity(component='com.xuanwu.etion/.SplashActivity')      
    #输入用户名      
    device.type('mzba')           
    #触摸密码框,相当于获取焦点      
    easy_device.touch(By.id('id/login_edit_pwd'), MonkeyDevice.DOWN_AND_UP)       
    #输入密码     
    device.type('888888')     
    #按下返回键,相当于关闭输入法的弹出框     
    device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)          
    #easy_device.touch(By.id('id/login_edit_account'), MonkeyDevice.DOWN_AND_UP)        

    #点击登录按钮     
    easy_device.touch(By.id('id/login_btn'), MonkeyDevice.DOWN_AND_UP)    



参考资料:http://blog.csdn.net/zm2714/article/details/7980634
http://blog.csdn.net/marshalchen/article/details/9119979
http://fengbohaishang.blog.51cto.com/5106297/962705
  • 大小: 9.2 KB
分享到:
评论

相关推荐

    移动应用测试Android自带命令参数(adb、monkey、monkeyrunner)知识点整理(思维导图加图).rar

    移动应用测试Android自带命令参数(adb、monkey、monkeyrunner)知识点整理(思维导图加图).rar 根据如下Android自动命令参数(adb、monkey、monkeyrunner)整理: adb命令参数 Monkey命令选项参考 monkeyrunner

    android计算器monkeyrunner测试脚本

    用于测试Android计算器,适合初学monkeyrunner测试脚本编写者

    monkey、monkeyrunner测试工具

    是针对android的压力测试工具,monkey是由系统自动发送伪随机事件,而monkeyrunner可以自定义事件,这个文档就简单介绍了我学习时候的总结以及用到的内容,写的一份总结,希望对以后学习这个的初学者有所帮助

    monkeyrunner在pydev的集成

    比较了monkeyrunner和monkey这两个好兄弟,同时把monkeyrunner实现的脚本集成到eclipse-pydev的环境中运行

    Android应用Monkeyrunner测试脚本

    Android应用Monkeyrunner测试脚本,通过脚本记录测试指令后进行回放,可实现自动化功能测试

    Android自动测试之monkeyrunner工具

    前言:最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它testtool等等。因接触时间很短,很多地方有不足...

    android monkey自动化测试改为java调用monkeyrunner Api

    众所周知,一般情况下我们使用android中的monkeyrunner进行自动化测试时,使用的是python语言来写测试脚本。不过,最近发现可以用java调用monkeyrunner Api,用java语言写测试脚本。   于是,就简单研究了一下。...

    android实用测试方法之Monkey与MonkeyRunner

    AndroidUI测试懒人第一:胡乱的按键,交给电脑搞定有时候,我们要折腾一下程序,健壮不健壮,...集成到了比较新版本的SDKR8(即android2.2以后),然后,就有了下文monkey的使用Monkey的智力就是一个三岁小孩的水平,所以,使用

    Android自动化介绍

    自动化入门介绍,android monkey monkeyrunner相关介绍

    monkey runner使用方法

    android自动化测试方法: monkey runner使用方法介绍 更多请到官网: http://developer.android.com/tools/help/monkeyrunner_concepts.html

    Android Monkey

    Android Monkey可以实现多设备(模拟器)同时运行monkey压力测试

    monkeyrunner环境搭建

    MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制Android设备app,测试其稳定性并通过截屏可以方便地记录出现的...

    android测试环境搭建

    android环境的配置、monkey\monkeyrunner搭建、appium环境搭建

    Android自动测试之Monkey工具

    前言:最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它testtool等等。因接触时间很短,很多地方有不足...

    Android 自动化测试框架

    Monkey,MonkeyRunner,UIAutomator,Robotium,Appium,Monkey Talk 一、Monkey  是Android SDK自带的测试工具,是一个命令行工具,可以运行在模拟器中或者实际设备中,它向系统发送伪随机的用户事件流(如按键...

    Android自动化测试之MonkeyRunner--从环境构建、参数讲解、脚本制作到实战技巧

    Android自动化测试之MonkeyRunner--从环境构建、参数讲解、脚本制作到实战技巧

    深入理解Android自动化测试

    非扫描版 带书签许奔 著ISBN:978-7-111-52120-4目录本书赞誉前言第一部分 基础篇第1章 Android自动化...monkey之子monkeyrunner使用详解3.1 monkeyrunner概述3.2 monkeyrunner API详解3.3 monkeyrunner脚本编写

    MonkeyRunner文档

    MonkeyRunner详细说明文档文档,源码路径:https://android.googlesource.com/platform/sdk/+/6db5720/monkeyrunner/,或本人另一个资源中下载

Global site tag (gtag.js) - Google Analytics