android 自動(dòng)化測(cè)試之MonkeyRunner學(xué)習(xí)(二)
上次說(shuō)到已經(jīng)配好了MonkeyRunner的運(yùn)行環(huán)境,現(xiàn)在講解怎么進(jìn)行簡(jiǎn)單的MonkeyRunner測(cè)試。這個(gè)拖了很久才有時(shí)間和心情總結(jié)一下。真是計(jì)劃趕不上變化啊。
就不說(shuō)廢話了。http://developer.android.com/tools/help/MonkeyDevice.html ,這個(gè)地址是android上的MonkeyRunner官方文檔地址。上面關(guān)于MonkeyRunner的一些方法說(shuō)的很詳細(xì)。本篇不是詳細(xì)解釋MonkeyRunner方法的文章,只是根據(jù)我的理解,結(jié)合自己的一個(gè)例子講解一下怎么使用MonkeyRunner寫測(cè)試程序。
MonkeyRunner工具共有三個(gè)類:MonkeyRunner、MonkeyDevice、MonkeyImage。
一、MonkeyRunnner類:
這個(gè)類主要用于把MonkeyRunner連接至真機(jī)或者模擬器,另外有個(gè)顯示提示信息的alert方法和一個(gè)選擇方法比較常用。
二、MonkeyImage類:
這個(gè)類主要是測(cè)試過(guò)程中,用來(lái)保存測(cè)試截圖,把圖片保存成各種格式,并且可以比較兩個(gè)MonkeyImage對(duì)象。
主要常用的有兩個(gè)方法:writeToFile (string path, string format) ,這個(gè)是保存截圖的位置,和命名,可以把圖片保存到sdcard里面,也可以保存到電腦里面;sameAs (MonkeyImage other, float percent) ,這個(gè)用來(lái)比較兩個(gè)截圖是否相同,結(jié)果為boolean值。
三、MonkeyDevice類:
這個(gè)類的方法就多了一下,主要提供了安裝和卸載程序包、啟動(dòng)一個(gè)活動(dòng)及操作鍵盤等事件的方法。像里面的startActivity (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags) 啟動(dòng)一個(gè)應(yīng)用,press (string name, dictionary type)點(diǎn)擊控件 ,touch (integer x, integer y, integer type)點(diǎn)擊控件(通過(guò)坐標(biāo)定位) ,drag (tuple start, tuple end, float duration, integer steps) 拖拉控件等等方法比較常用。
MonekeyRunner這個(gè)測(cè)試工具用起來(lái)不算太難,下面給出一段代碼簡(jiǎn)單解釋一下:
FetionTest.py
#coding=utf-8 Python程序的第一句,添加這句使注釋支持中文
# 導(dǎo)入需要的MonkeyRunner的包,也可以是自己寫的類,如果文件很多的話
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
#連接真機(jī),里面要寫正確自己的真機(jī)對(duì)應(yīng)的名字,cmd下命令下,可以用adb devices 看到
devices1=MonkeyRunner.waitForConnection(5,"1234567890ABCDEF")
#連接模擬器
devices2=MonkeyRunner.waitForConnection(5,"emulator-5554")
#啟動(dòng)飛信的主界面,這是我測(cè)的飛信程序,里面主要是配好飛信的包名和啟動(dòng)Activity
devices1.startActivity
(component = 'cn.com.fetion/.android.ui.activities.StartActivity')
devices2.startActivity
(component = 'cn.com.fetion/.android.ui.activities.StartActivity')
#休眠8秒,便于帳號(hào)的登錄
MonkeyRunner.sleep(8.0)
#點(diǎn)擊我的好友一欄,這里使用的是坐標(biāo)方法
devices1.touch(202,258,"DOWN_AND_UP")
#選中好友
devices1.touch(222,326,"DOWN_AND_UP")
devices1.touch(442,325,"DOWN_AND_UP")
# 點(diǎn)擊“加入黑名單”
devices1.touch(223,563,"DOWN_AND_UP")
# 下面是進(jìn)行截圖,和保存圖片
result1 = device1.takeSnapshot()
result1.writeToFile('E:\slack01.png','png')
#點(diǎn)擊返回鍵,可以找到模擬器上任何一個(gè)建對(duì)應(yīng)的關(guān)鍵值,這個(gè)在官方文檔里可以查到
device1.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
result2 = device1.takeSnapshot()
result2.writeToFile('E:\slack02.png','png')
這個(gè)程序就簡(jiǎn)單說(shuō)這些,另外可以對(duì)自己的程序進(jìn)行優(yōu)化,可以把不同的測(cè)試case封裝到一個(gè)方法里,也可以把一些配置設(shè)置成全局變量,然后在不同的類里進(jìn)行調(diào)用。這些需要簡(jiǎn)單了解一下Python的編程知識(shí)。
下面說(shuō)一個(gè)比較好用的獲取坐標(biāo)的工具。就是用來(lái)獲取真機(jī)上坐標(biāo)的工具,當(dāng)我們點(diǎn)擊真機(jī)上的空間時(shí),能顯示真機(jī)上的點(diǎn)擊點(diǎn)的坐標(biāo)。
這個(gè)是一個(gè)可以自己定義的python文件,只有幾句話:
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder
# 里面添加你的真機(jī)的名字
device = mr.waitForConnection(5,"MSM8225QRD5")
recorder.start(device)
比如,我把它定義為monkey_recorder.py, 然后放在G盤,在cmd下運(yùn)行 monkeyrunner monkey_recorder.py ,就會(huì)出現(xiàn)如下界面:
當(dāng)我們?cè)谶@個(gè)工具上點(diǎn)擊時(shí),真機(jī)也會(huì)跟著執(zhí)行,并且會(huì)顯示每一步我們點(diǎn)擊的位置的坐標(biāo),比如,我點(diǎn)擊打開音樂(lè)播放器會(huì)記錄如下:
這個(gè)工具的好只有處你用過(guò)幾次才知道的,呵呵,反正有些應(yīng)用程序里很小的圖標(biāo)只能通過(guò)坐標(biāo)獲取點(diǎn)擊事件,這個(gè)工具的優(yōu)勢(shì)就顯示出來(lái)了。另外,需要注意,這個(gè)是不能用來(lái)獲取模擬器坐標(biāo)的,模擬器上的坐標(biāo)只有自己下個(gè)截圖工具,來(lái)量取坐標(biāo)了。這一點(diǎn)確實(shí)很蛋疼。
軟件工具都是這樣,沒(méi)有絕對(duì)的便利。MonkeyRunner也不例外。呵呵,這一次就寫這么多吧,這個(gè)工具簡(jiǎn)單的使用介紹的也差不多了,更多的還需要自己去摸索,熟能生巧嘛。希望大家能多多分享,多多交流。
相關(guān)鏈接:
posted on 2013-07-03 10:45 順其自然EVO 閱讀(2364) 評(píng)論(0) 編輯 收藏 所屬分類: android