本文章轉(zhuǎn)載于搜狗測試
在這個系列的上一篇文章中,我們介紹了Monkey的用法,這篇文章將繼續(xù)介紹Adt自帶的另外一個自動化工具MonkeyRunner
MonkeyRunner和Monkey的關(guān)系
在這個系列的上一篇文章中,我們介紹了Monkey最常規(guī)的一種用法,即進行完全隨機的測試(點擊文末“閱讀原文”可以打開這篇文章查看)。在這種情況下,Monkey會自己產(chǎn)生一些隨機的操作指令給自己執(zhí)行。但是如果想要按照一個特定的指令序列執(zhí)行,就要借助MonkeyRunner。
MonkeyRunner是一個運行于PC端的程序,它可以把預先定義好的操作指令一條一條發(fā)送給Monkey,從而控制Monkey進行更加精確的自動化操作。
其實MonkeyRunner和Monkey的這種關(guān)系從名字就能看出來一些端倪。
MonkeyRunner的使用方法
MonkeyRunner發(fā)送給Monkey的操作指令是按照特定的協(xié)議編寫的,這里我們不需要關(guān)心協(xié)議的具體內(nèi)容,只需要使用Python編寫自動化腳本,調(diào)用MonkeyRunner預先定義好的函數(shù)。需要說明的是,MonkeyRunner雖然使用到Python,但實際上并不需要安裝Python的運行環(huán)境,就像前面提到的,使用這個系列介紹的工具進行Android自動化測試都不需要安裝其它額外的工具。
在使用MonkeyRunner時,首先需要開啟模擬器,或者通過USB連接真實的Android設(shè)備。
MonkeyRunner的可執(zhí)行文件放在sdk的tools目錄下,是一個命令行的工具。
你可以在任意位置用Python編寫好腳本,再用MonkeyRunner來執(zhí)行。而且這些腳本只能通過MonkeyRunner執(zhí)行,不能像其它py文件一樣直接通過Python執(zhí)行。
比如在命令行輸入:
D:\Adt\sdk\tools\monkeyrunner D:\sogouqa.py
下面這個腳本調(diào)起搜狗手機瀏覽器,打開菜單并截圖,這個腳本示例可以用來檢查搜狗手機瀏覽器的菜單是不是顯示正常。
MonkeyRunner支持的功能總結(jié)
物理按鍵操作
屏幕操作(比如點擊、長按、拖動)
安裝/卸載應(yīng)用
支持多設(shè)備/模擬器
通過控件進行操作
執(zhí)行shell命令(比如可以直接刪除文件)
發(fā)送boardcast
錄制與回放功能
這里簡單介紹一下錄制與回放的功能,這個功能并沒有一個單獨的程序入口,我們同樣需要在MonkeyRunner中運行一段腳本:
腳本執(zhí)行完后就會出現(xiàn)錄制與回放的界面:
就是這樣一個簡單的界面,點擊左邊的截圖會記錄一條點擊動作,上面的那一排按鈕可以增加一些其它的動作,比如延時或者鍵盤動作。
Export Actions可以保存錄制的內(nèi)容,但保存的并不是Python腳本文件,你同樣需要編寫另外一段腳本來回放這段錄制,除此之外你也可以選擇利用剛才錄制時的坐標自己編寫點擊的操作。
使用坐標編寫腳本的局限性
MonkeyRunner默認的屏幕操作都是根據(jù)絕對坐標,比如需要在剛才的腳本基礎(chǔ)上進一步點擊菜單上的設(shè)置功能,通過截圖或者腳本錄制工具,你已經(jīng)知道了設(shè)置菜單項的坐標是(72, 684),這樣就可以使用MonkeyDevice的touch方法來點擊設(shè)置按鈕:
device.touch(72, 684, "DOWN_AND_UP")
但是很不幸的,我們是用小米1編寫的測試腳本,小米1S的分辨率是480×854,如果換成別的設(shè)備,分辨率可能會發(fā)生改變,設(shè)置按鈕的位置就不再是(72, 684)。
好在很多情況下控件的位置和大小是按照屏幕的百分比計算的,比如說不管分辨率是多少,搜狗瀏覽器的設(shè)置都會出現(xiàn)在屏幕15%寬、80%高的地方。這樣我們就可以根據(jù)相對坐標來編寫自動化腳本:
還有的情況下,控件的位置和大小并不滿足這個規(guī)律,比如搜狗瀏覽器的設(shè)置頁面,在小米1和小米4兩臺不同的設(shè)備上,一屏能夠顯示的內(nèi)容都不一樣多,可以看出其中每個項目的相對坐標在這兩臺設(shè)備間很難統(tǒng)一。
最后,如果被測程序改版,對控件重新排序或布局,舊的自動化腳本也可能會失效。
為了解決這個問題,最好按照坐標以外的方式編寫自動化腳本。本系列的第三篇文章將會介紹如何利用控件的id編寫MonkeyRunner的自動化腳本。