Android自動化測試 - MonkeyRunner(一)介紹

MonkeyRunner介紹:

MonkeyRunner是Google提供的一個基於座標點Android黑盒自動化測試工具。

Monkeyrunner工具提供了一套API讓用戶/測試人員來調用,調用這些api可以控制一個Android設備或模擬器,而不需要了解對應的源碼。

有了Monkeyrunner,我們可以編寫python腳本來控制apk包的安裝和卸載、啓動app、向app發送各種動作事件、截取圖片並保存。

 

Monkeyrunner與Monkey的區別:

Monkey是通過adb shell命令,發送一系列僞隨機的模擬事件,主要用來做壓力、穩定性測試;

MonkeyRunner則可以通過api來產生特定命令和事件來控制設備和模擬器。 

 

MonkeyRunner所具有的特點:

支持多設備: API可以跨多個設備或模擬器實施測試套件。您可以在同一時間接上所有的設備或一次啓動全部模擬器(或統統一起),依據程序依次連接到每一個,然後運行一個或多個測試。也可以用程序啓動一個配置好的模擬器,運行一個或多個測試,然後關閉模擬器。

功能測試: monkeyrunner可以爲一個應用自動跑一次功能測試(自頂向下)。您提供按鍵或觸摸事件的輸入數值,然後通過截屏查看結果。

迴歸測試:monkeyrunner可以運行某個應用,並將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩定性。

可擴展的自動化:由於monkeyrunner是一個API工具包,您可以基於Python模塊和程序開發一整套系統,以此來控制Android設備。除了使用monkeyrunner API之外,您還可以使用標準的Python os和subprocess模塊來調用如adb這樣的Android工具。 您還可以向monkeyrunner API中添加您自己的類。

 

注意點:

monkeyrunner工具使用Jython(使用Java編程語言的一種Python實現,並不是Python),雖然腳本需保存爲.py文件,但卻不能使用python **.py來執行(會報找不到MonkeyRunner模塊),必須使用monkeyrunner **.py命令來執行

 

官方一個簡單的MonkeyRunner的例子

複製代碼
 1 # python引入monkeyRunner模塊
 2 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
 3 # 連接設備, 獲得一個MonkeyDevice對象
 4 device = MonkeyRunner.waitForConnection()
 5 # 安裝apk包. 返回值是boolean,可以判斷是否安裝成功
 6 device.installPackage('myproject/bin/MyApplication.apk')
 7 # 設定一個有效的測試程序包名
 8 package = 'com.example.android.myapplication'
 9 # 設定測試程序包名下的一個Activity名
10 activity = 'com.example.android.myapplication.MainActivity'
11 # 設定程序入口
12 runComponent = package + '/' + activity
13 # 啓動應用程序
14 device.startActivity(component=runComponent)
15 # 按下手機的菜單鍵
16 device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
17 # 截圖
18 result = device.takeSnapshot()
19 # 保存截圖
20 result.writeToFile('myproject/shot1.png','png')
複製代碼

 

從上面的實例中我們可以看出使用monkeyrunner測試應用程序的具體步驟爲

1、先從from.android.monkeyrunner中導入MonkeyRunner、MonkeyDevice、MonkeyImage

2、連接設備,等待設備連接並返回連接的設備

3、安裝測試程序包(可寫絕對路徑),安裝完畢後會返回布爾型變量,可通過此變量,寫一個if語句,判斷是否安裝成功

4、設置安裝程序包名和Activity名

5、通過包名/Activity來啓動應用程序

6、執行一系列的touch、drag等事件

7、截圖保存

8、截圖對比samas(對比前需要load之前保存的圖片),判斷結果


如何處理不同分辨率下的座標點位置:

如320*480的,怎麼移植到480*600的上面?

device.touch(340,580,'DOWN_AND_UP')

320/x = 480/newx, x = 340

480/y = 600/newy, y = 580

這樣就能求得一個比例關係了,用這個比例關係做一個類似宏替換就行,代碼基本不用動;甚至可以寫一個方法,獲取到像素後,與基礎的計算後,直接替換即可。

除以上方式,還可以運用hierarchyviewer獲取控件,通過控件找到座標。缺點:要開root,4.1.2以下要開root。注意4.1以上版本用uiautomatorviewer不需要root也可以獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章