日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【原創(chuàng)】Android 自動(dòng)化測(cè)試Monkey、Monkeyrunner

 WindySky 2016-03-14

軟件測(cè)試是軟件產(chǎn)品開(kāi)發(fā)過(guò)程中的重要環(huán)節(jié),對(duì)于保重軟件質(zhì)量具有重要的意思。手動(dòng)測(cè)試和自動(dòng)化測(cè)試是軟件測(cè)試的兩個(gè)基本手段。本文主要介Android – 自動(dòng)化測(cè)試
Android平臺(tái)上提供了一些自動(dòng)化測(cè)試工具:Monkey、Monkeyrunner。

Monkey、Monkeyrunner 概述

一、Monkey 概述
monkey可以直接在XP/WIN7上運(yùn)行,只要XP/WIN7上能用adb,即可使用。

Monkey測(cè)試是Android平臺(tái)自動(dòng)化測(cè)試的一種手段,通過(guò)Monkey程序模擬用戶(hù)觸摸屏幕、滑動(dòng)Trackball、按鍵等操作來(lái)對(duì)設(shè)備上的程序進(jìn)行壓力測(cè)試,檢測(cè)程序多久的時(shí)間會(huì)發(fā)生異常,Monkey測(cè)試是一種為了測(cè)試軟件的穩(wěn)定性、健壯性的快速有效的方法。

Monkey程序由Android系統(tǒng)自帶,使用Java語(yǔ)言寫(xiě)成,在Android文件系統(tǒng)中的存放路徑是:/system/framework/monkey.jar。
Monkey.jar程序是由一個(gè)名為“monkey”的Shell腳本來(lái)啟動(dòng)執(zhí)行,shell腳本在Android文件系統(tǒng)中的存放路徑是:/system/bin/monkey;這樣就可以通過(guò)在shell窗口中執(zhí)行: adb shell monkey {+命令參數(shù)}來(lái)進(jìn)行Monkey測(cè)試了。

二、Monkeyrunner 概述

1、monkeyrunner工具提供了一個(gè)API,使用此API寫(xiě)出的程序可以在Android代碼之外控制Android設(shè)備和模擬器。通過(guò)monkeyrunner,您可以寫(xiě)出一個(gè)Python程序去安裝一個(gè)Android應(yīng)用程序或測(cè)試包,運(yùn)行它,向它發(fā)送模擬擊鍵,截取它的用戶(hù)界面圖片,并將截圖存儲(chǔ)于工作站上。

monkeyrunner工具的主要設(shè)計(jì)目的是用于測(cè)試功能/框架水平上的應(yīng)用程序和設(shè)備,或用于運(yùn)行單元測(cè)試套件,但您當(dāng)然也可以將其用于其它目的

Monkeyrunner文件在SDK目錄的tools子目錄下,運(yùn)行時(shí),如果沒(méi)有指定環(huán)境變量,需到tools目錄下方可執(zhí)行

Monkeyrunner支持自己編寫(xiě)插件,控制事件,隨時(shí)截圖,簡(jiǎn)而言之,任何你在模擬器/設(shè)備中能干的事情,MonkeyRunner都能干,而且還可以記錄和回放!!! 

2、monkeyrunner工具為Android測(cè)試提供了以下特性:
多設(shè)備控制:monkeyrunner API可以跨多個(gè)設(shè)備或模擬器實(shí)施測(cè)試套件。您可以在同一時(shí)間接上所有的設(shè)備或一次啟動(dòng)全部模擬器(或統(tǒng)統(tǒng)一起),依據(jù)程序依次連接到每一個(gè),然后運(yùn)行一個(gè)或多個(gè)測(cè)試。您也可以用程序啟動(dòng)一個(gè)配置好的模擬器,運(yùn)行一個(gè)或多個(gè)測(cè)試,然后關(guān)閉模擬器。
 
功能測(cè)試: monkeyrunner可以為一個(gè)應(yīng)用自動(dòng)貫徹一次功能測(cè)試。您提供按鍵或觸摸事件的輸入數(shù)值,然后觀察輸出結(jié)果的截屏。
 
 回歸測(cè)試:monkeyrunner可以運(yùn)行某個(gè)應(yīng)用,并將其結(jié)果截屏與既定已知正確的結(jié)果截屏相比較,以此測(cè)試應(yīng)用的穩(wěn)定性。
 
 可擴(kuò)展的自動(dòng)化:由于monkeyrunner是一個(gè)API工具包,您可以基于Python模塊和程序開(kāi)發(fā)一整套系統(tǒng),以此來(lái)控制Android設(shè)備。除了使用monkeyrunner API之外,您還可以使用標(biāo)準(zhǔn)的Python os和subpress模塊來(lái)調(diào)用如adb這樣的Android工具。

三、Monkey和Monkeyrunner工具區(qū)別

Monkey:Monkey工具直接運(yùn)行在設(shè)備或模擬器的adb shell中,生成用戶(hù)或系統(tǒng)的偽隨機(jī)事件流。

monkeyrunner:monkeyrunner工具則是在工作站上通過(guò)API定義的特定命令和事件控制設(shè)備或模擬器。

Monkey 的基本使用方法

1、可以通過(guò)開(kāi)發(fā)機(jī)器上的命令行或腳本來(lái)啟動(dòng)Monkey。
由于Monkey運(yùn)行在模擬器/設(shè)備環(huán)境中,所以必須用其環(huán)境中的shell來(lái)進(jìn)行啟動(dòng)??梢酝ㄟ^(guò)在每條命令前加上adb shell來(lái)達(dá)到目的,也可以進(jìn)入Shell后直接輸入Monkey命令?;菊Z(yǔ)法如下:

> adb shell monkey [options] 

>adb shell
#monkey

如果不指定options,Monkey將以無(wú)反饋模式啟動(dòng),并把事件任意發(fā)送到安裝在目標(biāo)環(huán)境中的全部包。下面是一個(gè)更為典型的命令行示例,它啟動(dòng)指定的應(yīng)用程序,把調(diào)試等級(jí)加了1,并向其發(fā)送500個(gè)偽隨機(jī)事件:

> adb shell monkey -p your.package.name –v 500


2、Monkey 命令可簡(jiǎn)單分為如下四類(lèi):
 
基本配置選項(xiàng):  如設(shè)置嘗試的事件數(shù)量,反饋信息的級(jí)別。
 
運(yùn)行約束選項(xiàng): 如設(shè)置只對(duì)單獨(dú)的一個(gè)包進(jìn)行測(cè)試。
 
事件類(lèi)型和頻率: 如設(shè)置觸摸屏事件的發(fā)生頻率。
 
調(diào)試選項(xiàng),如設(shè)置忽略應(yīng)用程序異常,繼續(xù)向系統(tǒng)發(fā)送事件,直到計(jì)數(shù)完成

3、Monkey 命令解析:

名稱(chēng):  moncgcmd.jpg
查看次數(shù): 1
文件大小:  34.4 kb

Monkey runner 的基本使用方法:

1、Monkeyrunner 環(huán)境搭建

名稱(chēng):  Snap8.jpg
查看次數(shù): 1
文件大小:  18.5 KB

2、下載安裝Python
下載網(wǎng)址:https://www./

3、環(huán)境變量配置   ;C:\Python27(安裝目錄復(fù)制到Path的后面,注前面的“;”不要忘記哦)環(huán)境變量路徑以Win7為例:計(jì)算機(jī) -> 屬性 -> 高級(jí)系統(tǒng)設(shè)置 -> 環(huán)境變量 -> 系統(tǒng)變量 -> 找到Path

4、monkeyrunnerAPI于com.android.monkeyrunner包中包含三個(gè)模塊:

MonkeyRunner    :一個(gè)為monkeyrunner程序提供工具方法的類(lèi)。這個(gè)類(lèi)提供了用于連接monkeyrunner至設(shè)備或模擬器的方法。它還提供了用于創(chuàng)建一個(gè)monkeyrunner程序的用戶(hù)界面以及顯示內(nèi)置幫助的方法。   
waitForConnection (float timeout, string deviceId) 
sleep (float seconds) 
help (string format) 
 
MonkeyImage    :表示一個(gè)截圖對(duì)象。這個(gè)類(lèi)提供了截圖、將位圖轉(zhuǎn)換成各種格式、比較兩個(gè)MonkeyImage對(duì)象以及寫(xiě)圖像到文件的方法。     
MonkeyImage創(chuàng)建對(duì)象的方法如下:
newimage =MonkeyDevice.takeSnapshot()
writeToFile (string path, string format)

MonkeyDevice    :表示一個(gè)設(shè)備或模擬器。這個(gè)類(lèi)提供了安裝和卸載程序包、啟動(dòng)一個(gè)活動(dòng)以及發(fā)送鍵盤(pán)或觸摸事件到應(yīng)用程序的方法。您也可以用這個(gè)類(lèi)來(lái)運(yùn)行測(cè)試包。     

MonkeyDevice的常用方法:
a.Touch (x坐標(biāo), y坐標(biāo),動(dòng)作)
可以通過(guò)開(kāi)啟Pointer location在手機(jī)上直接查看坐標(biāo)點(diǎn).

b.Press(‘按鍵值’, 動(dòng)作)
動(dòng)作包括:DOWN, UP, DOWN_AND_UP。大部分時(shí)間用DOWN_AND_UP來(lái)模擬按鍵、松手的過(guò)程。比如要進(jìn)行一個(gè)返回鍵操作:
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)

c.Drag((x, y),(x, y),持續(xù)時(shí)間,軌跡點(diǎn))
按鍵值為Andriod鍵值表中有的值drag((x, y),(x, y),持續(xù)時(shí)間,軌跡點(diǎn))
第一組是起始坐標(biāo),第二組終點(diǎn)坐標(biāo)。這里的坐標(biāo)值要通過(guò)hierarchyviewer工具來(lái)獲取,軌跡點(diǎn)類(lèi)似采樣

d.啟動(dòng)Activity:startActivity(‘string’)
在python程序中,您將以Python模塊的形式使用這些類(lèi)。monkeyrunner工具不會(huì)自動(dòng)導(dǎo)入這些模塊。您必須使用類(lèi)似如下的from語(yǔ)句:
 
from  com.android.monkeyrunner  import  Monkey Runner,     
Monkey Device, Monkey Image

您可以在一個(gè)from語(yǔ)句中導(dǎo)入超過(guò)一個(gè)模塊,其間以逗號(hào)分隔。

5、運(yùn)行monkeyrunner
 
 monkeyrunner命令的語(yǔ)法為:
 
monkeyrunner -plugin  <程序文件名> <程序選項(xiàng)>

1、啟動(dòng)一個(gè)Android系統(tǒng)的模擬器,即為命令中device

2、 將cmd命令定位到android SDK的路徑下的tools目錄
3、輸入命令"monkeyrunner",回車(chē),進(jìn)入Shell命令交互方式
    導(dǎo)入monkeyrunner所要使用的模塊:        A.直接在shell命令中輸入(然后回車(chē)):
    from com.android.monkeyrunner import MonkeyRunner, 
    MonkeyDevice,MonkeyImage
    B.輸入device = MonkeyRunner.waitForConnection(),然后回車(chē)

6、一個(gè)簡(jiǎn)單的monkeyrunner程序?qū)嵗?br> 以下為一個(gè)簡(jiǎn)單的monkeyrunner程序,它將會(huì)連接到一個(gè)設(shè)備,創(chuàng)建一個(gè)MonkeyDevice對(duì)象。使用MonkeyDevice對(duì)象,程序?qū)惭b一個(gè)Android應(yīng)用包,運(yùn)行其中一個(gè)活動(dòng),并向其發(fā)送按鍵事件。程序接下來(lái)會(huì)將結(jié)果截圖,創(chuàng)建一個(gè)MonkeyImage對(duì)象,并使用這個(gè)對(duì)象截圖將保存至.png文件。
  
# 導(dǎo)入此程序所需的monkeyrunner模塊 
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice MonkeyImage
# 連接當(dāng)前設(shè)備,返回一個(gè)MonkeyDevice對(duì)象 
device = MonkeyRunner.waitForConnection() 
# 安裝Android包,注意,此方法返回的返回值為boolean,由此您可以判斷安裝過(guò)程是否正常 
device.installPackage('myproject/bin/MyApplication.apk') 
# 運(yùn)行此應(yīng)用中的一個(gè)活動(dòng)device.startActivity(component='com.example.android.myapplication.MainActivity') 
# 按下菜單按鍵 
device.press('KEYCODE_MENU','DOWN_AND_UP') 
# 截取屏幕截圖 
result = device.takeSnapshot()
# 將截圖保存至文件 
result.writeToFile('myproject/shot1.png','png')
#時(shí)延(秒):
MonkeyRunner.sleep(3) 
#滑動(dòng)屏幕(Python腳本):
for i in range(1,70):device.drag(start,end,0.1,10)  
#觸擊屏幕: 
device.touch(94,34,'DOWN_AND_UP')  
# 運(yùn)行此應(yīng)用中的一個(gè)活動(dòng)device.startActivity(component='com.example.android.myapplication.MainActivity') 
# 按下菜單按鍵 
device.press('KEYCODE_MENU','DOWN_AND_UP') 
# 截取屏幕截圖 
result = device.takeSnapshot()
# 將截圖保存至文件 
result.writeToFile('myproject/shot1.png','png')

7、Monkeyrunner自動(dòng)化測(cè)試的記錄和回放
MonkeyRunner工具中提供了記錄與回放的功能,可以通過(guò)monkey_recorder.py和monkey_playback.py兩個(gè)python文件來(lái)實(shí)現(xiàn)。此兩個(gè)文件存放在:android源代碼 ->  monkeyrunner源代碼 -> scripts文件夾。

1)記錄
 a、啟動(dòng)模擬器或通過(guò)USB連接手機(jī)
 b、打開(kāi)命令行提示符,并且定位到Tools文件下輸入:
        monkeyrunner monkey_recorder.py 按下回車(chē)鍵
如下圖:
名稱(chēng):  1.jpg
查看次數(shù): 1
文件大小:  26.0 KB

錄制界面菜單介紹:

名稱(chēng):  2.jpg
查看次數(shù): 2
文件大小:  29.1 KB

注意:導(dǎo)出的腳本要與monkey_recorder.py和monkey_playback.py 在同一目錄下,即Tools文件夾下。

名稱(chēng):  3.jpg
查看次數(shù): 2
文件大小:  13.8 KB


2)回放
 
腳本回放需要使用另外一個(gè)腳本 monkeyplayback.py

執(zhí)行步驟:
 a、啟動(dòng)模擬器或通過(guò)USB連接手機(jī)
 b、打開(kāi)命令行提示符,并且定位到Tools文件下輸入:
        monkeyrunner monkeyplayback.py  “sound”
        按下回車(chē)鍵


附錄:腳本

1、monkeyrecoder.py

#Usage: monkeyrunner monkeyrecorder.py  
#monkeyrecorder.py 
from com.android.monkeyrunner import MonkeyRunner
from com.android.monkeyrunner.recorder import MonkeyRecorder
device = MonkeyRunner.waitForConnection()
MonkeyRecorder.start(device)

2、monkeyplayback.py

import sys
from com.android.monkeyrunner import MonkeyRunner
CMD_MAP = {
    "TOUCH":lambda dev,arg:dev.touch(**arg),
    "DRAG":lambda dev,arg:dev.drag(**arg),
    "PRESS":lambda dev,arg:dev.press(**arg),
    "TYPE":lambda dev,arg:dev.type(**arg),
    "WAIT":lambda dev,arg:MonkeyRunner.sleep(**arg)
    }
# Process a single file for the specified device.
def process_file(fp,device):
    for line in fp:
        (cmd,rest) = line.split("|")
        try:
            rest = eval(rest)
        except:
            print"unable to parse options"
            continue
        if cmd not in CMD_MAP:
            print"unknown command:" + cmd
            continue
        CMD_MAP[cmd](device,rest)
def main():
    file = sys.argv[1]
    fp = open(file,"r")
    device = MonkeyRunner.waitForConnection()
    process_file(fp,device)
    fp.close();
if __name__=="__main__":
    main()                                 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多