|
現(xiàn)在,已經(jīng)有大量的Android自動(dòng)化測(cè)試架構(gòu)或工具可供我們使用,其中包括:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolectric。另外LessPainful也提供服務(wù)來進(jìn)行真實(shí)設(shè)備上的自動(dòng)化測(cè)試。
Android自身提供了對(duì)instrumentation測(cè)試的基本支持,其中之一就是位于Android.test包內(nèi)的ActivityInstrumentationTestCase2類,它擴(kuò)展了JUnit的TestCase類來提供Android activities的功能測(cè)試。在應(yīng)用測(cè)試中,每一個(gè)activity首先會(huì)被Instrumentation初始化,然后再加載到Android模擬器或設(shè)備的Dalvik虛擬機(jī)中來執(zhí)行。
Android SDK自帶一個(gè)測(cè)試工具M(jìn)onkeyRunner,它提供的API和執(zhí)行環(huán)境可以運(yùn)行Python語言編寫的測(cè)試代碼。它提供API來連接設(shè)備,安裝/卸載應(yīng)用,運(yùn)行應(yīng)用,截屏,比對(duì)圖片來判斷特定命令執(zhí)行后的屏幕是否包含預(yù)期信息,以及運(yùn)行對(duì)應(yīng)用的測(cè)試。MonkeyRunner使用ActivityInstrumentationTestCase2, ProviderTestCase,ServiceTestCasek, SingleLaunchActivityTestCase及其他類來定義測(cè)試用例,并使用InstrumentationTestRunner類來運(yùn)行測(cè)試。
Robotium是另一種通過InstrumentationTestRunner來完成Android交互式測(cè)試的架構(gòu),它橫跨多個(gè)activities,支持功能測(cè)試,系統(tǒng)測(cè)試和接收測(cè)試。Robotium支持Activities、Dialogs、Toasts、Menus、Context Menus甚至Honeycomb,并且它可以同Maven和Ant集成來完成持續(xù)集成測(cè)試。Robotium被稱之為針對(duì)Android應(yīng)用的又一個(gè)Selenium。
Robolectric另辟蹊徑,它并不依賴于Android提供的測(cè)試功能,它使用了shadow objects并且運(yùn)行測(cè)試于普通的工作站/服務(wù)器JVM,不像模擬器或設(shè)備需要dexing(Android dex編譯器將類文件編譯成Android設(shè)備上的Dalvik VM使用的格式),打包,部署和運(yùn)行的過程,大大減少了測(cè)試執(zhí)行的時(shí)間。Pivotal實(shí)驗(yàn)室聲稱使用Robolectric可以在28秒內(nèi)運(yùn)行1047個(gè)測(cè)試。
LessPainful將Android測(cè)試又推進(jìn)了一步,它提供了一個(gè)多設(shè)備平臺(tái)自動(dòng)化測(cè)試的服務(wù)。用戶上傳應(yīng)用(*.apk)和用Cucumber(一種業(yè)務(wù)相關(guān)的DSL)編寫的測(cè)試文件,選擇測(cè)試運(yùn)行需要的設(shè)備配置,最后測(cè)試將自動(dòng)執(zhí)行并生成測(cè)試報(bào)告。它支持的設(shè)備包括Garmin Asus,幾款HTC,LG,Samsung Galaxy,Sony Xperia和Motorola Motodefy。
為了了解更多LessPainful提供的服務(wù)細(xì)節(jié),我們采訪了LessPainful公司的CEO Jonas Maturana Larsen。下面就是這次簡(jiǎn)短的訪問:
InfoQ:在不同版本的Android上運(yùn)行應(yīng)用程序,存在什么問題?為了保證程序能正常運(yùn)行,開發(fā)者需要在Android的每一個(gè)版本上測(cè)試他的應(yīng)用嗎?
JML:舉個(gè)例子,SAXParser在Android 2.2之前有一個(gè)bug存在于對(duì)ContentHandler.startElement的回調(diào)中,它導(dǎo)致應(yīng)用產(chǎn)生錯(cuò)誤的行為。
到目前為止,我們已經(jīng)在很多方面發(fā)現(xiàn)了不同操作系統(tǒng)版本間的差異性。其中一些可能在2.1-update1上導(dǎo)致崩潰,但可以正常運(yùn)行于2.1-update3和2.2.
InfoQ:不同的設(shè)備對(duì)Android來說,有沒有真正的區(qū)別?你能否給我們舉個(gè)例子,比如Android2.2應(yīng)用可以運(yùn)行在HTC但不能運(yùn)行于Samsung?(或其他各種Android版本和設(shè)備制造商的組合)
JML:在LG手機(jī),HorizontalScrollViews有時(shí)會(huì)導(dǎo)致子視圖上的背景圖片消失。這個(gè)問題存在于我們測(cè)試的所有的LG手機(jī),不管Android版本是多少。
如果你不自己處理這類問題,它將導(dǎo)致你的應(yīng)用在不同設(shè)備上不盡相同。例如,Motorola將會(huì)用紅色邊框來高亮一個(gè)輸入域。在我曾經(jīng)參與的一個(gè)項(xiàng)目中,我們用同樣的紅色邊框來表示輸入有誤。
還有一些問題,與其說和制造商相關(guān),不如說是和硬件相關(guān):比如,一些手機(jī)使用了較小的RAM和高分辨率的攝像頭,當(dāng)你處理手機(jī)上的圖像時(shí)就會(huì)將導(dǎo)致崩潰。
InfoQ:這些測(cè)試是如何執(zhí)行的?
JML:測(cè)試就如同運(yùn)行一個(gè)ActivityInstrumentationTestCase2,主要使用Robotium來運(yùn)行。我們對(duì)應(yīng)用所做的唯一修改就是去掉已有的簽名,再為它重新生成我們的簽名文件。
在測(cè)試運(yùn)行完成后,應(yīng)用會(huì)被卸載,而手機(jī)也會(huì)被恢復(fù)到初始設(shè)置。
InfoQ:與MonkeyRunner,Robotium和Robolectric相比,你們所提供的服務(wù)有什么優(yōu)勢(shì)呢?
JML:LessPainful是一種服務(wù),而并不僅僅是一種架構(gòu)。我們希望創(chuàng)建一種服務(wù),不但使測(cè)試能夠進(jìn)行,并且比起其他任何一種架構(gòu),它能夠節(jié)省我們大量測(cè)試時(shí)間,還能夠幫助我們發(fā)現(xiàn)更多的bug。
另外,我們相信使用Cucumber,可以清晰地定義高層次測(cè)試描述,同時(shí)可以更好地被開發(fā)團(tuán)隊(duì)以外的人員共享。
以Git領(lǐng)域?yàn)槔覀兏M蔀橄袷荊itHub那樣,而不只是通常的git庫。
InfoQ:你們有計(jì)劃未來要支持更多的設(shè)備嗎?
JML:是的。我們計(jì)劃繼續(xù)增加對(duì)更多設(shè)備的支持。如果有這樣的要求提出,我們就會(huì)努力完成它。
目前,我們也在著手于對(duì)ios設(shè)備的支持,希望beta版能在今年秋季發(fā)布。
InfoQ:什么是LessPainful企業(yè)版?
JML:我們將提供一個(gè)工具集,它就類似于一個(gè)Mac Mini,但我們會(huì)非常靈活的滿足顧客的需求。LessPainful企業(yè)版目前還沒有正式推出,所以敬請(qǐng)期待。
英文原文:Automated Testing Solutions for Android
it知識(shí)庫:Android自動(dòng)化測(cè)試解決方案,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。