一步步實(shí)現(xiàn)Android CI
創(chuàng)新互聯(lián)成立十載來(lái),這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、域名注冊(cè)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。網(wǎng)站是否美觀、功能強(qiáng)大、用戶體驗(yàn)好、性價(jià)比高、打開快等等,這些對(duì)于網(wǎng)站建設(shè)都非常重要,創(chuàng)新互聯(lián)通過對(duì)建站技術(shù)性的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。
Android上的CI構(gòu)建鏈與其它平臺(tái)一致,依然包含Compilation, Testing, Inspection,
Deploying階段,每一個(gè)階段的Feedback的都保持對(duì)整個(gè)團(tuán)隊(duì)透明。
CI中各個(gè)步驟執(zhí)行先后順序的安排,應(yīng)該是執(zhí)行時(shí)間較短的優(yōu)先執(zhí)行。執(zhí)行時(shí)間短的一般在提交代碼前就可執(zhí)行,錯(cuò)誤率也比較低,就應(yīng)該盡可能先執(zhí)行。這樣失敗會(huì)來(lái)得更早一些,每一次CI運(yùn)行失敗前驗(yàn)證完畢的東西更多。上圖中CI的工作流,正是在這樣的一個(gè)原則的基礎(chǔ)上形成的。
環(huán)境準(zhǔn)備
* 在CI服務(wù)器上安裝Java和Android運(yùn)行環(huán)境
* 安裝構(gòu)建工具,本文采用Ant進(jìn)行實(shí)踐
* 搭建好CI服務(wù)。本文采用開源的CI服務(wù)Jenkins(Hudson)。
* Jenkins在功能上完全能夠滿足功能上的需要,且簡(jiǎn)單易用。
* 安裝Ruby環(huán)境。本文中使用的Functional Test測(cè)試工具是基于Ruby實(shí)現(xiàn)的。
步驟 1:持續(xù)構(gòu)建
持續(xù)構(gòu)建的目的是隨時(shí)可自動(dòng)化生成最新的可運(yùn)行的App。雖然有這么多限定詞來(lái)表示這一步完成的驗(yàn)證條件,但事實(shí)上只需要經(jīng)過三個(gè)步驟即可完成。
一是更新代碼,Jenkins中已經(jīng)很好的支持了SVN和Git這兩項(xiàng)常用的代碼管理工具。二是采用構(gòu)建腳本構(gòu)建安裝包,Android已經(jīng)很貼心的連Ant構(gòu)建腳本都為我們準(zhǔn)備好了,并且因?yàn)锳ndroid的包結(jié)構(gòu)的規(guī)范,也很大程度上消除各開發(fā)人員環(huán)境下項(xiàng)目機(jī)構(gòu)的不一致。三是持續(xù)執(zhí)行前兩步,只有在每一次出現(xiàn)任何代碼變動(dòng)時(shí)立即執(zhí)行前兩步才能保證隨時(shí)都可以提供可運(yùn)行的安裝包。
持續(xù)構(gòu)建實(shí)現(xiàn)起來(lái)比較容易,但是它所達(dá)成的效果還是很不錯(cuò)的。對(duì)開發(fā)人員來(lái)說,都可以采用同一個(gè)腳本快捷的在本地生成安裝包,這在很大程度上也減少了出現(xiàn)“這在我機(jī)器上運(yùn)行的很好”的問題。對(duì)于測(cè)試人員,隨時(shí)都可以獲取最新的測(cè)試包,不需要再等待開發(fā)人員騰出時(shí)間來(lái)做這件事。對(duì)于產(chǎn)品人員,可以利用這些最新包,在開發(fā)人員完成后第一時(shí)間獲得反饋。甚至可以在完成部分功能的情況下就開始體驗(yàn)了。
Best Practice:
* 在每一次提交后都對(duì)整個(gè)project進(jìn)行構(gòu)建。這里的提交應(yīng)該包含任何一個(gè)微小的改動(dòng)。
* 所有人遵循相同的構(gòu)建順序,采用同一套構(gòu)建腳本
* 每次構(gòu)建的時(shí)候都執(zhí)行同一套腳本
步驟 2:持續(xù)測(cè)試
持續(xù)測(cè)試是快速的通過自動(dòng)化的手段收集軟件健康狀況的方法。持續(xù)測(cè)試是為了驗(yàn)證構(gòu)建完成的包功能是否可用,而不僅僅能夠安裝運(yùn)行。對(duì)App的測(cè)試可以從UI,
Function, Code三個(gè)層次來(lái)進(jìn)行,這三者間的權(quán)重關(guān)系可以參照測(cè)試金字塔來(lái)設(shè)計(jì)。
根據(jù)前文提到的優(yōu)先運(yùn)行最快的原則,這三個(gè)層次的測(cè)試,應(yīng)該按照Unit Test, Functional Test,和UI
Test的先后順序安排在CI執(zhí)行。
1、添加Unit Test
Unit
Test是運(yùn)行成本最低的測(cè)試,并且對(duì)于測(cè)試用例覆蓋最為全面。鼓勵(lì)盡可能利用單元測(cè)試覆蓋用例。Java中的單元測(cè)試首選的還是使用JUnit,但Android
project的代碼因?yàn)閷?duì)SDK存在著極強(qiáng)的依賴,僅僅使用JUnit進(jìn)行單元測(cè)試,能夠覆蓋的代碼實(shí)在太少。為了解除對(duì)SDK的依賴,自然會(huì)考慮引入Mockito這樣的Mock框架。但即使借助Mockito寫單元測(cè)試的工作量依然巨大,因?yàn)樾枰猰ock的對(duì)象實(shí)在太多。并且Android的object在JVM中無(wú)法創(chuàng)建。
這時(shí)可以采用Robolectric單元測(cè)試框架,這將大幅度提升單元測(cè)試覆蓋率,且理論上可以達(dá)到100%。Robolectric是以JUnit為核心,完成了對(duì)Android
SDK的stub。采用stub的方式后,Android的組件在JVM中即可創(chuàng)建并運(yùn)行,無(wú)需在Android平臺(tái)下運(yùn)行。這也意味著在Android開發(fā)中可以采用TDD的方式,進(jìn)一步提高單元測(cè)試覆蓋率。該框架的使用JUnit完全一樣,運(yùn)行性能也一致。
由于Robolectric對(duì)SDK進(jìn)行了stub,在寫單元測(cè)試時(shí)完全可以對(duì)組件狀態(tài)進(jìn)行驗(yàn)證,甚至可以對(duì)組件進(jìn)行操作。下面這個(gè)測(cè)試就是對(duì)button點(diǎn)擊事件的測(cè)試,并且驗(yàn)證了Activity的狀態(tài)。
CI中各個(gè)步驟執(zhí)行先后順序的安排,應(yīng)該是執(zhí)行時(shí)間較短的優(yōu)先執(zhí)行。執(zhí)行時(shí)間短的一般在提交代碼前就可執(zhí)行,錯(cuò)誤率也比較低,就應(yīng)該盡可能先執(zhí)行。這樣失敗會(huì)來(lái)得更早一些,每一次CI運(yùn)行失敗前驗(yàn)證完畢的東西更多。上圖中CI的工作流,正是在這樣的一個(gè)原則的基礎(chǔ)上形成的。
步驟 1:持續(xù)構(gòu)建
持續(xù)構(gòu)建的目的是隨時(shí)可自動(dòng)化生成最新的可運(yùn)行的App。雖然有這么多限定詞來(lái)表示這一步完成的驗(yàn)證條件,但事實(shí)上只需要經(jīng)過三個(gè)步驟即可完成。
一是更新代碼,Jenkins中已經(jīng)很好的支持了SVN和Git這兩項(xiàng)常用的代碼管理工具。二是采用構(gòu)建腳本構(gòu)建安裝包,Android已經(jīng)很貼心的連Ant構(gòu)建腳本都為我們準(zhǔn)備好了,并且因?yàn)锳ndroid的包結(jié)構(gòu)的規(guī)范,也很大程度上消除各開發(fā)人員環(huán)境下項(xiàng)目機(jī)構(gòu)的不一致。三是持續(xù)執(zhí)行前兩步,只有在每一次出現(xiàn)任何代碼變動(dòng)時(shí)立即執(zhí)行前兩步才能保證隨時(shí)都可以提供可運(yùn)行的安裝包。
持續(xù)構(gòu)建實(shí)現(xiàn)起來(lái)比較容易,但是它所達(dá)成的效果還是很不錯(cuò)的。對(duì)開發(fā)人員來(lái)說,都可以采用同一個(gè)腳本快捷的在本地生成安裝包,這在很大程度上也減少了出現(xiàn)“這在我機(jī)器上運(yùn)行的很好”的問題。對(duì)于測(cè)試人員,隨時(shí)都可以獲取最新的測(cè)試包,不需要再等待開發(fā)人員騰出時(shí)間來(lái)做這件事。對(duì)于產(chǎn)品人員,可以利用這些最新包,在開發(fā)人員完成后第一時(shí)間獲得反饋。甚至可以在完成部分功能的情況下就開始體驗(yàn)了。
Best Practice:
* 在每一次提交后都對(duì)整個(gè)project進(jìn)行構(gòu)建。這里的提交應(yīng)該包含任何一個(gè)微小的改動(dòng)。
* 所有人遵循相同的構(gòu)建順序,采用同一套構(gòu)建腳本
* 每次構(gòu)建的時(shí)候都執(zhí)行同一套腳本
步驟 2:持續(xù)測(cè)試
持續(xù)測(cè)試是快速的通過自動(dòng)化的手段收集軟件健康狀況的方法。持續(xù)測(cè)試是為了驗(yàn)證構(gòu)建完成的包功能是否可用,而不僅僅能夠安裝運(yùn)行。對(duì)App的測(cè)試可以從UI,
Function, Code三個(gè)層次來(lái)進(jìn)行,這三者間的權(quán)重關(guān)系可以參照測(cè)試金字塔來(lái)設(shè)計(jì)。
根據(jù)前文提到的優(yōu)先運(yùn)行最快的原則,這三個(gè)層次的測(cè)試,應(yīng)該按照Unit Test, Functional Test,和UI
Test的先后順序安排在CI執(zhí)行。
1、添加Unit Test
Unit
Test是運(yùn)行成本最低的測(cè)試,并且對(duì)于測(cè)試用例覆蓋最為全面。鼓勵(lì)盡可能利用單元測(cè)試覆蓋用例。Java中的單元測(cè)試首選的還是使用JUnit,但Android
project的代碼因?yàn)閷?duì)SDK存在著極強(qiáng)的依賴,僅僅使用JUnit進(jìn)行單元測(cè)試,能夠覆蓋的代碼實(shí)在太少。為了解除對(duì)SDK的依賴,自然會(huì)考慮引入Mockito這樣的Mock框架。但即使借助Mockito寫單元測(cè)試的工作量依然巨大,因?yàn)樾枰猰ock的對(duì)象實(shí)在太多。并且Android的object在JVM中無(wú)法創(chuàng)建。
這時(shí)可以采用Robolectric單元測(cè)試框架,這將大幅度提升單元測(cè)試覆蓋率,且理論上可以達(dá)到100%。Robolectric是以JUnit為核心,完成了對(duì)Android
SDK的stub。采用stub的方式后,Android的組件在JVM中即可創(chuàng)建并運(yùn)行,無(wú)需在Android平臺(tái)下運(yùn)行。這也意味著在Android開發(fā)中可以采用TDD的方式,進(jìn)一步提高單元測(cè)試覆蓋率。該框架的使用JUnit完全一樣,運(yùn)行性能也一致。
由于Robolectric對(duì)SDK進(jìn)行了stub,在寫單元測(cè)試時(shí)完全可以對(duì)組件狀態(tài)進(jìn)行驗(yàn)證,甚至可以對(duì)組件進(jìn)行操作。下面這個(gè)測(cè)試就是對(duì)button點(diǎn)擊事件的測(cè)試,并且驗(yàn)證了Activity的狀態(tài)。
接下來(lái)的工作就是將Robolectric集成到CI中,讓它檢查程序的健康狀況。Robolectric本質(zhì)上還是JUnit,只是多了一些stub?
對(duì)象而已。那我們集成Robolectric的方法和JUnit完全一致。只需創(chuàng)建Ant task,并在Jenkins中執(zhí)行此task即可。此Ant task如下:
在將這些測(cè)試集成至CI后,最重要的一步收集結(jié)果是不能忘的。之前已經(jīng)說過Calabash也可按照單元測(cè)試報(bào)告規(guī)范輸出,加上Robolectric本身就是JUnit框架的擴(kuò)展,報(bào)告也是按照單元測(cè)試報(bào)告規(guī)范輸出。Unit
Test和Function Test的報(bào)告即可使用JUnit test收集。
要想獲得單元測(cè)試覆蓋率報(bào)告,Cobertura是個(gè)不錯(cuò)的選擇。添加
從Jenkins上即可獲得清晰的單元測(cè)試覆蓋率的報(bào)告
2、添加Function Test
Android為大家提供了一套集成測(cè)試框架Android integration testing
framework。但此框架未集成Cucumber,這導(dǎo)致每增加一個(gè)Function Test都需要較大的開發(fā)和維護(hù)工作。這樣高成本的實(shí)現(xiàn)Function
Test將大大延緩開發(fā)進(jìn)度,最終因?yàn)轫?xiàng)目進(jìn)度的原因?qū)е翭unction Test被丟棄。產(chǎn)生這樣的后果那必然是不愿意看到的。
目前Android平臺(tái)下已經(jīng)出現(xiàn)多種Functiong Testing測(cè)試工具,如Native Driver, Robotium,
Calabash等。在嘗試對(duì)比后,最終選擇了Calabash Android作為解決方案。Calabash
Android是Cucumber在Android平臺(tái)的實(shí)現(xiàn),使用Ruby書寫Function Test,并提供了一組操作Anadroid App元素的API。
3、添加UI Test
Android在新近退出了UI測(cè)試工具UIAutomator。此工具僅支持Android4.1及以上平臺(tái),鑒于目前市場(chǎng)上2.3和4.0版本仍占主導(dǎo)的情況來(lái)看,目前還無(wú)法滿足大家的需要。另外應(yīng)用該工具實(shí)現(xiàn)UI測(cè)試的開發(fā)成本還較高,筆者暫不推薦使用此工具,但應(yīng)該關(guān)注其發(fā)展。
另外基于錄制回放機(jī)制的測(cè)試方法同樣可以進(jìn)行UI測(cè)試。但錄制回放的方法在面對(duì)功能快速迭代時(shí),維護(hù)工作會(huì)急劇增加,而這個(gè)維護(hù)成本可以說是很難承受的,所以在此也不會(huì)將這種測(cè)試方法集成至CI中。
目前來(lái)看Android中UI測(cè)試還無(wú)令人滿意的方法。若對(duì)UI成功比較看重,可以投入精力應(yīng)用UIAutomator進(jìn)行UI測(cè)試。
Best Practice:
*
將測(cè)試按照單元測(cè)試,組件測(cè)試,功能測(cè)試和系統(tǒng)測(cè)試進(jìn)行劃分。單元測(cè)試應(yīng)該在每次提交時(shí)觸發(fā)執(zhí)行,其它的測(cè)試根據(jù)運(yùn)行時(shí)間長(zhǎng)短和重要程度可以每次提交觸發(fā)執(zhí)行或者定時(shí)周期執(zhí)行。
* 將運(yùn)行較快的測(cè)試優(yōu)先執(zhí)行。
* 讓功能測(cè)試能夠重復(fù)執(zhí)行。否則維護(hù)成本太高,會(huì)被舍棄。若是后臺(tái)數(shù)據(jù)導(dǎo)致不可重復(fù),可以將數(shù)據(jù)抽象成為數(shù)據(jù)集,在每次運(yùn)行前進(jìn)行重置。
* 書寫測(cè)試時(shí)每一個(gè)assert只做一種判斷,這樣可以明確每次測(cè)試的目的,并且可以快速定位測(cè)試失敗愿意。
步驟 3:持續(xù)檢查持續(xù)檢查是對(duì)于代碼本身檢測(cè)和反饋。檢測(cè)主要通過對(duì)代碼靜態(tài)分析驗(yàn)證代碼風(fēng)格,編程規(guī)范,代碼復(fù)用,代碼語(yǔ)言中的Best Practice等多個(gè)維度的代碼質(zhì)量。
Sonar作為一個(gè)開源的代碼質(zhì)量檢測(cè)工具,涵蓋了7項(xiàng)代碼質(zhì)量檢測(cè)方式。這充分滿足Android平臺(tái)下對(duì)于代碼質(zhì)量的檢測(cè)分析。Sonar分為兩部分一部分是代碼分析工具,另一部分是數(shù)據(jù)分析展示的Server。
Best Practice:
* 將測(cè)試覆蓋率,代碼分析結(jié)果透明化
* 持續(xù)降低代碼復(fù)雜度
* 持續(xù)的促進(jìn)設(shè)計(jì)的演進(jìn)
* 持續(xù)的維護(hù)代碼結(jié)構(gòu)
* 持續(xù)減少代碼重復(fù)
步驟 4:持續(xù)部署
由于Android App采用用戶手動(dòng)從Appstore自行下載安裝的方式發(fā)布,使得Android
App無(wú)法直接部署至用戶手機(jī)中。另外Appstore需要對(duì)于上線的App進(jìn)行審核,不能持續(xù)進(jìn)行Release。因而Android中持續(xù)部署將以持續(xù)發(fā)布可安裝包為目標(biāo)。
在以上目的下,只需根據(jù)自身項(xiàng)目資源找到合適的安裝包管理工具即可。如本文采用Dropbox來(lái)管理所有安裝包。
Dropbox作為一個(gè)云存儲(chǔ)平臺(tái),在Android終端設(shè)備上可以輕松下載存放在其中的文件,同時(shí)上傳安裝包也可以交由Dropbox自己完成。
步驟 5:持續(xù)反饋
反饋是所有改進(jìn)的開始,必須要讓所有人獲取到他們所關(guān)心的反饋信息,才能實(shí)施改進(jìn)。持續(xù)反饋的目的就是讓所有人都掌握項(xiàng)目健康狀況。項(xiàng)目所有人事實(shí)都是有意愿知道項(xiàng)目當(dāng)前的健康狀況的,那CI就應(yīng)該將項(xiàng)目的情況做到透明,并將不同的反饋通知到各相關(guān)的成員。
CI不同階段產(chǎn)生了不同維度的反饋,如單元測(cè)試報(bào)告,測(cè)試覆蓋率等。本實(shí)踐中將這些反饋都透明的展示在項(xiàng)目首頁(yè)中。之所以沒有將這些反饋再以郵件的方式通知所有人,是因?yàn)閳F(tuán)隊(duì)成員已經(jīng)養(yǎng)成了查看CI的習(xí)慣。
如果說只給所有人發(fā)一封郵件說明項(xiàng)目狀況,那必然是告訴所有人“CI所有步驟是否都返回正確?”。這樣一個(gè)反饋,包含了編譯正確,所有測(cè)試通過,安裝包已經(jīng)準(zhǔn)備完畢等重要信息。有必要讓所有人都知道這個(gè)信息,特別是在CI執(zhí)行失敗的時(shí)候。Jenkins自身已經(jīng)提供一個(gè)簡(jiǎn)單有效的透明化方法,以項(xiàng)目為藍(lán)色表示通過,紅色表示有步驟失敗。
反饋的通知方式有很多種,不一定要采用郵件通知的方式??梢詫ふ腋佑腥さ姆绞?,如果播放音樂和設(shè)置警報(bào)燈。在每一次Build成功或失敗后都播放一段有趣的音樂,打開不同顏色的警報(bào)燈,這兩種方法都是是一種簡(jiǎn)單有效的方式,可以讓項(xiàng)目所有人都獲取到最為關(guān)鍵的信息。
Feb 23 2012更新: 還有Sikuli (),基于優(yōu)秀的圖像對(duì)比庫(kù)opencv的測(cè)試工具,測(cè)試腳本使用Python編寫,非常強(qiáng)大。如果你的app沒有源碼,可以選擇它;或者你想做系統(tǒng)測(cè)試(跨app的測(cè)試),也可以選擇它。其它的還是用下面說的那些個(gè)吧。
我通過其核心包sikuli-script.jar實(shí)現(xiàn)了android的sikuli化,暫時(shí)不打算開源。其實(shí)原理挺簡(jiǎn)單的,認(rèn)真看過sikuli源碼的應(yīng)該都能寫出來(lái)。
看lz的意思應(yīng)該只是想問應(yīng)用層的,我來(lái)說點(diǎn)應(yīng)用層的
先說說開源的吧:
Robotium
Monkeyrunner
Robolectric
CTS
還有個(gè)新興的測(cè)試工具,以前在GitHub看到,現(xiàn)在找不到了,好像是BDD類型的語(yǔ)法;現(xiàn)在還不成熟。
另外基于web的測(cè)試也有基于Selenium Webdriver 的 Android WebDriver:
有兩種:
基于Remote Server的:官方提供了java接口的,但是Python版的官方里面卻沒有。我非常喜歡Python,所以自己實(shí)現(xiàn)了并且開源到了GitHub: 有問題大家可以提到上面
基于Instrumentation的:已經(jīng)在Android SDK r14里面可以安裝了
不開源的就多了,不過我見過的一般是以下幾種思路:
1. 基于Android Java Instrumentation框架:
基于Robotium,比如bitbar的產(chǎn)品:
基于Instrumentation,那就海了去了,很多公司自家寫的工具都基于這個(gè);另外Robotium就是基于這個(gè)的
2. 基于Android lib層的各種命令,比如sendevent,getevent, monkey, service這些,然后用各種語(yǔ)言封裝
MonkeyRunner還是很有前景的,Google自己弄的?,F(xiàn)在最新的dev版本已經(jīng)有支持UI的id操作的EasyMonkey了??梢詆it clone git://看看
編輯于 2012-02-23 7 條評(píng)論 ? 作者保留權(quán)利
贊同23反對(duì),不會(huì)顯示你的姓名
乙醇,打雜的......
落小雪、蔣金龍、Reeta L 等人贊同
appium是最近我關(guān)注的一個(gè)不錯(cuò)的移動(dòng)端自動(dòng)化測(cè)試工具,支持android和ios。
放上兩段視頻。第一段是講解appium的原理及quick start;第二段講解了appium的源碼結(jié)構(gòu)和具體實(shí)現(xiàn)。有興趣可以看一下,相信應(yīng)該有收獲。
1,appium 原理與quick start
乙醇的appium視頻教程之a(chǎn)ppium入門及原理剖析
2,appium源碼解析
乙醇的appium源碼解讀
發(fā)布于 2013-12-07 5 條評(píng)論 ? 作者保留權(quán)利
贊同25反對(duì),不會(huì)顯示你的姓名
知乎用戶,Coding/Reading/Hiking/Running
知乎用戶、曹媛媛、石存灃 等人贊同
1、Monkey是Android SDK自帶的測(cè)試工具,在測(cè)試過程中會(huì)向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流,如按鍵輸入、觸摸屏輸入、手勢(shì)輸入等),實(shí)現(xiàn)對(duì)正在開發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試,也有日志輸出。實(shí)際上該工具只能做程序做一些壓力測(cè)試,由于測(cè)試事件和數(shù)據(jù)都是隨機(jī)的,不能自定義,所以有很大的局限性。
2、MonkeyRunner也是Android SDK提供的測(cè)試工具。嚴(yán)格意義上來(lái)說MonkeyRunner其實(shí)是一個(gè)Api工具包,比Monkey強(qiáng)大,可以編寫測(cè)試腳本來(lái)自定義數(shù)據(jù)、事件。缺點(diǎn)是腳本用Python來(lái)寫,對(duì)測(cè)試人員來(lái)說要求較高,有比較大的學(xué)習(xí)成本。
3、Instrumentation是早期Google提供的Android自動(dòng)化測(cè)試工具類,雖然在那時(shí)候JUnit也可以對(duì)Android進(jìn)行測(cè)試,但是Instrumentation允許你對(duì)應(yīng)用程序做更為復(fù)雜的測(cè)試,甚至是框架層面的。通過Instrumentation你可以模擬按鍵按下、抬起、屏幕點(diǎn)擊、滾動(dòng)等事件。Instrumentation是通過將主程序和測(cè)試程序運(yùn)行在同一個(gè)進(jìn)程來(lái)實(shí)現(xiàn)這些功能,你可以把Instrumentation看成一個(gè)類似Activity或者Service并且不帶界面的組件,在程序運(yùn)行期間監(jiān)控你的主程序。缺點(diǎn)是對(duì)測(cè)試人員來(lái)說編寫代碼能力要求較高,需要對(duì)Android相關(guān)知識(shí)有一定了解,還需要配置AndroidManifest.xml文件,不能跨多個(gè)App。
4、UiAutomator也是Android提供的自動(dòng)化測(cè)試框架,基本上支持所有的Android事件操作,對(duì)比Instrumentation它不需要測(cè)試人員了解代碼實(shí)現(xiàn)細(xì)節(jié)(可以用UiAutomatorviewer抓去App頁(yè)面上的控件屬性而不看源碼)?;贘ava,測(cè)試代碼結(jié)構(gòu)簡(jiǎn)單、編寫容易、學(xué)習(xí)成本,一次編譯,所有設(shè)備或模擬器都能運(yùn)行測(cè)試,能跨App(比如:很多App有選擇相冊(cè)、打開相機(jī)拍照,這就是跨App測(cè)試)。缺點(diǎn)是只支持SDK 16(Android 4.1)及以上,不支持Hybird App、WebApp。
5、Espresso是Google的開源自動(dòng)化測(cè)試框架。相對(duì)于Robotium和UIAutomator,它的特點(diǎn)是規(guī)模更小、更簡(jiǎn)潔,API更加精確,編寫測(cè)試代碼簡(jiǎn)單,容易快速上手。因?yàn)槭腔贗nstrumentation的,所以不能跨App。配合Android Studio來(lái)編寫測(cè)試的簡(jiǎn)單例子
6、Selendroid:也是基于Instrumentation的測(cè)試框架,可以測(cè)試Native App、Hybird App、Web App,但是網(wǎng)上資料較少,社區(qū)活躍度也不大。
7、Robotium也是基于Instrumentation的測(cè)試框架,目前國(guó)內(nèi)外用的比較多,資料比較多,社區(qū)也比較活躍。缺點(diǎn)是對(duì)測(cè)試人員來(lái)說要有一定的Java基礎(chǔ),了解Android基本組件,不能跨App。
8、Athrun是淘寶出的一個(gè)移動(dòng)測(cè)試框架/平臺(tái),同時(shí)支持iOS和Android。Android部分也是基于Instrumentation,在Android原有的ActivityInstrumentationTestCase2類基礎(chǔ)上進(jìn)行了擴(kuò)展,提供一整套面向?qū)ο蟮腁PI。這里有詳細(xì)介紹。
9、Appium是最近比較熱門的框架,社區(qū)也很活躍。這個(gè)框架應(yīng)該是是功能最強(qiáng)大的,
它的優(yōu)點(diǎn):
它的哲理是:
它的設(shè)計(jì)理念:
相關(guān)限制:
總結(jié):
在iOS部分是封裝了UIAutomation;Android 4.2以上是用UiAutomator,Android 2.3 ~ 4.1用的是 Instrumentation,也就說Appium同時(shí)封裝了UiAutomator和Instrumentation。所以Appium擁有了以上幾大框架的所有優(yōu)點(diǎn):跨App,支持Native App、Hybird App、Web App,還支持N種語(yǔ)言來(lái)編寫你的測(cè)試腳本。
如果你在Windows使用Appium,你沒法使用預(yù)編譯專用于OS X的.app文件,因?yàn)锳ppium依賴OS X專用的庫(kù)來(lái)支持iOS測(cè)試,所以在Windows平臺(tái)你不能測(cè)試iOS Apps。這意味著你只能通過在Mac上來(lái)運(yùn)行iOS測(cè)試。
Client/Server架構(gòu),運(yùn)行的時(shí)候Server端會(huì)監(jiān)聽Client端發(fā)過來(lái)的命令,翻譯這些命令發(fā)送給移動(dòng)設(shè)備或模擬器,然后移動(dòng)設(shè)備或模擬器做出響應(yīng)的反應(yīng)。正是因?yàn)檫@種架構(gòu),所以Client可以使用Appium client libraries多種語(yǔ)言的測(cè)試腳本,而且Server端完全可以部署在服務(wù)器上,甚至云服務(wù)器。
Session,每個(gè)Client連接到Server以后都會(huì)有一個(gè)Session ID,而且Client發(fā)送命令到Server端都需要這個(gè)Session ID,因?yàn)檫@個(gè)seesion id代表了你所打開的瀏覽器或者是移動(dòng)設(shè)備的模擬器。所以你甚至可以打開N個(gè)Session,同時(shí)測(cè)試不同的設(shè)備或模擬器。
Desired Capabilities,其實(shí)就是一個(gè)鍵值對(duì),設(shè)置一些測(cè)試的相關(guān)信息來(lái)告訴Server端,我們需要測(cè)試iOS、還是Android,或者換是WebApp等信息。
Appium Server是Node.js寫的,所以可以直接用NPM來(lái)進(jìn)行安裝。
Appium Clients,Mac OS和Win下提供GUI,不需要裝Node.js,方便測(cè)試人員操作。
用Appium自動(dòng)化測(cè)試不需要重新編譯App;
支持很多語(yǔ)言來(lái)編寫測(cè)試腳本,Java、Javascript、PHP、Python、C#、Ruby等主流語(yǔ)言;
不需要為了自動(dòng)化測(cè)試來(lái)重造輪子,因?yàn)閿U(kuò)展了WebDriver。(WebDriver是測(cè)試WebApps的一種簡(jiǎn)單、快速的自動(dòng)化測(cè)試框架,所以有Web自動(dòng)化測(cè)試經(jīng)驗(yàn)的測(cè)試人員可以直接上手);
移動(dòng)端自動(dòng)化測(cè)試應(yīng)該是開源的;
開源;
支持Native App、Hybird App、Web App;
支持Android、iOS、Firefox OS;
Server也是跨平臺(tái)的,你可以使用Mac OS X、Windows或者Linux;
顯示全部
編輯于 2015-03-20 1 條評(píng)論 ? 作者保留權(quán)利
贊同4反對(duì),不會(huì)顯示你的姓名
知乎用戶,hello rabbit
郝思遠(yuǎn)、man Nor、徐佳琦 等人贊同
當(dāng)前有很大的趨勢(shì)是轉(zhuǎn)向移動(dòng)應(yīng)用平臺(tái),Android 是最廣泛使用的移動(dòng)操作系統(tǒng),2014 年大約占 80% 以上的市場(chǎng)。在開發(fā) Android 應(yīng)用的時(shí)候要進(jìn)行測(cè)試,現(xiàn)在市場(chǎng)上有大量的測(cè)試工具。
本文提到的開源 Android 軟件測(cè)試工具包括:Android Test Kit, AndroidJUnit4, Appium, calabash-android, Monkey, MonkeyTalk, NativeDriver, Robolectric, RoboSpock, Robotium, UIAutomator, Selendroid。
Android Test Kit
Android Test Kit 是一組 Google 開源測(cè)試工具,用于 Android 平臺(tái),包含 Espresso API 可用于編寫簡(jiǎn)潔可靠的 Android UI 測(cè)試。
OSChina URL: Android Test Kit首頁(yè)、文檔和下載
相關(guān)資源
* Android application testing with the Android test framework – Tutorial
* Espresso for Android is here!
AndroidJUnit4
AndroidJUnit4 是一個(gè)讓 JUnit 4 可以直接運(yùn)行在 Android 設(shè)備上的開源命令行工具。
OSChina URL: AndroidJUnit4首頁(yè)、文檔和下載
Appium
Appium 是一個(gè)開源、跨平臺(tái)的自動(dòng)化測(cè)試工具,用于測(cè)試原生和輕量移動(dòng)應(yīng)用,支持 iOS, Android 和 FirefoxOS 平臺(tái)。Appium 驅(qū)動(dòng)蘋果的 UIAutomation 庫(kù)和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 協(xié)議。
Appinm 的 iOS 支持是基于 Dan Cuellar's 的 iOS Auto. Appium 同時(shí)綁定了 Selendroid 用于老的 Android 平臺(tái)測(cè)試。
OSChina URL: Appium首頁(yè)、文檔和下載
相關(guān)資源
* Appium Tutorial
* Android UI testing with Appium
Calabash-android
calabash-android 是一個(gè)基于 Cucumber 的 Android 的功能自動(dòng)化測(cè)試框架。Calabash 允許你寫和執(zhí)行,是開源的自動(dòng)化移動(dòng)應(yīng)用測(cè)試工具,支持 Android 和 iOS 原生應(yīng)用。Calabash 的庫(kù)允許原生和混合應(yīng)用的交互測(cè)試,交互包括大量的終端用戶活動(dòng)。Calabash 可以媲美 Selenium WebDriver。但是, 需要注意的是 web 應(yīng)用和桌面環(huán)境的交互跟觸摸屏應(yīng)用的交互是不同的。Calabash 專為觸摸屏設(shè)備的原生應(yīng)用提供 APIs。
OSChina URL: calabash-android首頁(yè)、文檔和下載
相關(guān)資源
* A better way to test Android applications using Calabash
* Calabash Android: query language basics
Monkey
Monkey 是 Google 開發(fā)的 UI/應(yīng)用測(cè)試工具,也是命令行工具,主要針對(duì)壓力測(cè)試。你可以在任意的模擬器示例或者設(shè)備上運(yùn)行。Monkey 發(fā)送一個(gè)用戶事件的 pseudo-random 流給系統(tǒng),作為你開發(fā)應(yīng)用的壓力測(cè)試。
OSChina URL: UI/Application Exerciser Monkey
MonkeyTalk
MonkeyTalk 是世界上最強(qiáng)大的移動(dòng)應(yīng)用測(cè)試工具。MonkeyTalk 自動(dòng)為 iOS 和 Android 應(yīng)用進(jìn)行真實(shí)的,功能性交互測(cè)試。MonkeyTalk 提供簡(jiǎn)單的 "smoke tests",復(fù)雜數(shù)據(jù)驅(qū)動(dòng)的測(cè)試套件。
MonkeyTalk 支持原生,移動(dòng)和混合應(yīng)用,真實(shí)設(shè)備或者模擬器。MonkeyTalk 使得場(chǎng)景捕獲非常容易,可以記錄高級(jí)別,可讀的測(cè)試腳本。同樣的命令可以用在 iOS 和 Android 應(yīng)用上。你可以記錄一個(gè)平臺(tái)的一個(gè)測(cè)試,并且可以在另外一個(gè)平臺(tái)回放。MonkeyTalk 支持移動(dòng)觸摸和基于手勢(shì)交互為主的移動(dòng)體驗(yàn)。點(diǎn)擊,拖拽,移動(dòng),甚至是手指繪制也可以被記錄和回放。
OSChina URL: MonkeyTalk首頁(yè)、文檔和下載
相關(guān)資源
* Using MonkeyTalk in AndroidStudio
NativeDriver
NativeDriver 是 WebDriver API 的實(shí)現(xiàn),是原生應(yīng)用 UI 驅(qū)動(dòng),而不是 web 應(yīng)用。
OSChina URL: NativeDriver首頁(yè)、文檔和下載
Robolectric
Robolectric 是一款A(yù)ndroid單元測(cè)試框架,使用 Android SDK jar,所以你可以使用測(cè)試驅(qū)動(dòng)開發(fā) Android 應(yīng)用。測(cè)試只需幾秒就可以在工作站的 JVM 運(yùn)行。Robolectric 處理視圖縮放,資源加載和大量 Android 設(shè)備原生的 C 代碼實(shí)現(xiàn)。
Robolectric 允許你做大部分真實(shí)設(shè)備上可以做的事情,可以在工作站中運(yùn)行,也可以在常規(guī)的 JVM 持續(xù)集成環(huán)境運(yùn)行,不需要通過模擬器。
OSChina URL: Robolectric首頁(yè)、文檔和下載
Additional resources
* Better Android Testing with Robolectric 2.0
Using Robolectric for Android testing – Tutorial
RoboSpock
RoboSpock 是一個(gè)開源的 Android 測(cè)試框架。提供簡(jiǎn)單的編寫 BDD 行為驅(qū)動(dòng)開發(fā)規(guī)范的方法,使用Groovy 語(yǔ)音,支持 Google Guice 庫(kù)。RoboSpock 合并了 Robolectric 和 Spock 的功能。
OSChina URL: RoboSpock首頁(yè)、文檔和下載
相關(guān)資源
* RoboSpock – Behavior Driven Development (BDD) for Android
Robotium
Robotium 是一款國(guó)外的Android自動(dòng)化測(cè)試框架,主要針對(duì)Android平臺(tái)的應(yīng)用進(jìn)行黑盒自動(dòng)化測(cè)試,它提供了模擬各種手勢(shì)操作(點(diǎn)擊、長(zhǎng) 按、滑動(dòng)等)、查找和斷言機(jī)制的API,能夠?qū)Ω鞣N控件進(jìn)行操作。
Robotium結(jié)合Android官方提供的測(cè)試框架達(dá)到對(duì)應(yīng)用程序進(jìn)行自動(dòng)化的測(cè) 試。另外,Robotium 4.0版本已經(jīng)支持對(duì)WebView的操作。Robotium 對(duì)Activity,Dialog,Toast,Menu 都是支持的。
OSChina URL: Robotium首頁(yè)、文檔和下載
相關(guān)資源
* Robotium – Testing Android User Interface
* Android user interface testing with Robotium – Tutorial
UIAutomator
uiautomator 測(cè)試框架提高用戶界面(UI)的測(cè)試效率,通過自動(dòng)創(chuàng)建功能 UI 測(cè)試示例,可以在一個(gè)或者多個(gè)設(shè)備上運(yùn)行你的應(yīng)用。
OSChina URL: uiautomator首頁(yè)、文檔和下載
相關(guān)資源
* Automatic Android Testing with UiAutomator
Selendroid
Selendroid 是一個(gè) Android 原生應(yīng)用的 UI 自動(dòng)化測(cè)試框架。測(cè)試使用 Selenium 2 客戶端 API 編寫。Selendroid 可以在模擬器和實(shí)際設(shè)備上使用,也可以集成網(wǎng)格節(jié)點(diǎn)作為縮放和并行測(cè)試。
OSChina URL: Selendroid首頁(yè)、文檔和下載
相關(guān)資源
* Mobile Test Automation with Selendroid
* Road to setup Selendroid and create first test script of android application
* Up and running with: Selendroid
一些停止維護(hù)的 Android 測(cè)試工具
一些幾乎沒有繼續(xù)維護(hù)的開源 Android 測(cè)試工具項(xiàng)目(至少是最近幾個(gè)月都沒有更新的項(xiàng)目)。
Emmagee
Emmagee 是監(jiān)控指定被測(cè)應(yīng)用在使用過程中占用機(jī)器的CPU、內(nèi)存、流量資源的性能測(cè)試小工具。Emmagee 同時(shí)還提供非??岬囊恍┨匦?,比如定制間隔來(lái)收集數(shù)據(jù),使用浮動(dòng)窗口呈現(xiàn)實(shí)時(shí)進(jìn)程狀態(tài)等。
OSChina URL: Emmagee首頁(yè)、文檔和下載
Sirocco
Scirocco(scirocco-webdriver) 是開源的應(yīng)用自動(dòng)化測(cè)試工具,可以從 Eclipse 訪問必要的測(cè)試設(shè)備。Scirocco 提供自動(dòng)化的 Android 應(yīng)用測(cè)試功能,代替手工測(cè)試。Scirocco 支持谷歌的 NativeDriver,把 AndroidDriver 作為主要的測(cè)試庫(kù)。Scirocco 包括三個(gè)部分:NativeDriver,AndroidDriver,scirocco 插件(一個(gè) Eclipse 插件;可以自動(dòng)執(zhí)行 scenario 測(cè)試和制作測(cè)試報(bào)告截圖)。
OSChina URL: Scirocco首頁(yè)、文檔和下載
via softwaretestingmagazine
內(nèi)容來(lái)源:開源中國(guó)社區(qū)顯示全部
發(fā)布于 2015-03-27 添加評(píng)論 ? 作者保留權(quán)利
贊同11反對(duì),不會(huì)顯示你的姓名
知乎用戶,擁抱移動(dòng)互聯(lián)網(wǎng)
Android單元測(cè)試是通過junit框架來(lái)測(cè)試的。Android中建立JUnit測(cè)試環(huán)境有以下方法。集成步驟:
1.在androidManifest.xml文件中添加以下代碼:
instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.junittest" android:label="@string/app_name"
/instrumentation
2.新建一個(gè)測(cè)試測(cè)試類并繼承AndroidTestCase類,編寫測(cè)試方法,在測(cè)試方法內(nèi)使用斷言assert來(lái)測(cè)試要測(cè)試的方法。
3.點(diǎn)擊右面的大綱視圖,選擇要測(cè)試的方法,右鍵,run as ---Android JUnit test 。
目前大家對(duì)Python都有一個(gè)共識(shí),就是他對(duì)測(cè)試非常有用,自動(dòng)化測(cè)試?yán)颬ython用途也很廣,但是Python到底怎么進(jìn)行自動(dòng)化測(cè)試呢?今天就簡(jiǎn)單的向大家介紹一下怎么使用Python進(jìn)行自動(dòng)化測(cè)試,本文只是自己的一點(diǎn)點(diǎn)分享,若有錯(cuò)誤,請(qǐng)大家多多批評(píng)指正。這里主要介紹的是一些Python測(cè)試的框架
1、單元測(cè)試
a、unittest :Python自帶的單元測(cè)試框架
b、pyunit:Junit的Python版本
2、使用Pyhon進(jìn)行Windows GUI測(cè)試
這部分的功能主要就是和大家平時(shí)使用的QTP類似。在Windows下我們可以使用pywinauto這個(gè)開源的框架:
來(lái)個(gè)小例子:
app.Notepad.MenuSelect("Help-About Notepad")
app.AboutNotepad.OK.Click()
app.Notepad.Edit.TypeKeys ("pywinauto Works!", with_spaces = True)
呵呵,強(qiáng)大吧
3、使用Python進(jìn)行Web自動(dòng)化測(cè)試
使用Python進(jìn)行Web自動(dòng)化測(cè)試的工具有很多,這里就向大家推薦一下我比較熟悉的Selenium(Web Driver)吧。
在Android Studio中可以進(jìn)行單元測(cè)試
很多的文章指導(dǎo)你應(yīng)該在“build.gradle” 文件里面添加幾行代碼從而允許單元測(cè)試,并且告訴你應(yīng)該在項(xiàng)目依賴中添加Android測(cè)試庫(kù)。
其實(shí)你并不需要按照這種錯(cuò)誤的方式去做,因?yàn)檫@是完全沒有必要的。
Android Studio本身就支持Android單元測(cè)試,你只需要在你的項(xiàng)目中配置一下就可以了。
注意:還有好幾種廣受歡迎的Android單元測(cè)試框架,比如Robolectric,它們比我在這里提到的需要更多的配置,我希望在未來(lái)可以以這個(gè)題目再寫一些指導(dǎo)文章。
創(chuàng)建你的單元測(cè)試文件夾
我喜歡把單元測(cè)試放在我的主項(xiàng)目里面,比如“com.mypath.tests.” ,你可以把測(cè)試目錄放到你想要的地方。開始之前,像下面這樣,先創(chuàng)建你的測(cè)試文件夾。(譯者注:這一步不是必須的,你也可以把單元測(cè)試類創(chuàng)建在與Android Studio默認(rèn)的ApplicationTest類相同的路徑下面)
接下來(lái),創(chuàng)建一個(gè)叫做 “ExampleTest”的類,注意要繼承自InstrumentationTestCase類
然后可以添加一個(gè)簡(jiǎn)單的測(cè)試代碼,我們知道這段代碼肯定會(huì)運(yùn)行失敗
public class ExampleTest extends InstrumentationTestCase {
public void test() throws Exception {
final int expected = 1;
final int reality = 5;
assertEquals(expected, reality);
}
}1234567
注意:所有的測(cè)試方法必須以”test”開頭,這樣Android Studio才能自動(dòng)的找到所有你想要進(jìn)行單元測(cè)試的方法。
為你的項(xiàng)目配置單元測(cè)試
現(xiàn)在我們已經(jīng)有了一個(gè)會(huì)運(yùn)行失敗的測(cè)試單元,我們必須把它run起來(lái)。
首先點(diǎn)擊”Run- Edit Configurations”
然后點(diǎn)擊“+”從左邊彈出的列表里,選擇添加一個(gè) Android Tests,然后你可以在右上角給它改名為你想要的名字。
然后就會(huì)創(chuàng)建一下像下面這樣的測(cè)試項(xiàng)目配置
從下拉菜單中選擇你當(dāng)前的module
接下來(lái),選擇”All in Package”選項(xiàng),然后把你的剛才創(chuàng)建的測(cè)試文件夾選中。你也可以選擇“All in Module”選項(xiàng),這樣Android Studio會(huì)自動(dòng)的找到你整個(gè)Module中的所有測(cè)試單元,你也可以通過另外的選項(xiàng),指定某一個(gè)類甚至是測(cè)試方法。
做完這一切之后,看起來(lái)應(yīng)該像下面這樣
我也喜歡選中下面的“Show chooser dialog”,這樣當(dāng)每次運(yùn)行的時(shí)候,我可以指定如何去運(yùn)行
現(xiàn)在點(diǎn)擊”Apply”然后關(guān)閉,你現(xiàn)在應(yīng)該可以看到你的測(cè)試案例已經(jīng)作為一個(gè)可以運(yùn)行的項(xiàng)目配置在Android Studio上面的工具欄上了
運(yùn)行我們的單元測(cè)試
我使用Genymotion來(lái)完成所有的事情,所以開啟你的Genymotion然后運(yùn)行test
在assertion這一行添加一個(gè)斷點(diǎn),然后點(diǎn)擊 “run debug mode”,目的是為了證明Android Studio確實(shí)執(zhí)行了我們的單元測(cè)試。
當(dāng)你開始你的測(cè)試工程之后,你會(huì)看到一個(gè)叫做“Running Tests…”的顯示窗口
當(dāng)你的測(cè)試沒有通過,點(diǎn)擊“Logcat”然后查看綜合的輸出結(jié)果,看下我們測(cè)試失敗的原因
通過控制臺(tái),你會(huì)發(fā)現(xiàn)給出的錯(cuò)誤理由應(yīng)該是
“junit.framework.AssertionFailedError: expected:1 but was:5”1
請(qǐng)注意測(cè)試本身不是靠工具的而是靠設(shè)計(jì),這是我的理念,所以我一向覺得,很多人認(rèn)為做測(cè)試做的好就是靠掌握一門好的工具,這個(gè)觀點(diǎn)是不正確的,所以我可以負(fù)責(zé)任的告訴你,做Android手機(jī)需要掌握的不是工具、而是理念、思維、以及框架,總的來(lái)說是本質(zhì),而工具只是輔助,那么現(xiàn)在我來(lái)介紹一些我了解的工具(僅僅是了解,很多沒用過)
開源 Android 軟件測(cè)試工具包括:Android Test Kit, AndroidJUnit4, Appium, calabash-android, Monkey, MonkeyTalk, NativeDriver, Robolectric, RoboSpock, Robotium, UIAutomator, Selendroid。
Android Test Kit
Android Test Kit 是一組 Google 開源測(cè)試工具,用于 Android 平臺(tái),包含 Espresso API 可用于編寫簡(jiǎn)潔可靠的 Android UI 測(cè)試。
AndroidJUnit4
AndroidJUnit4 是一個(gè)讓 JUnit 4 可以直接運(yùn)行在 Android 設(shè)備上的開源命令行工具。
Appium
Appium 是一個(gè)開源、跨平臺(tái)的自動(dòng)化測(cè)試工具,用于測(cè)試原生和輕量移動(dòng)應(yīng)用,支持 iOS, Android 和 FirefoxOS 平臺(tái)。Appium 驅(qū)動(dòng)蘋果的 UIAutomation 庫(kù)和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 協(xié)議。Appinm 的 iOS 支持是基于 Dan Cuellar's 的 iOS Auto. Appium 同時(shí)綁定了 Selendroid 用于老的 Android 平臺(tái)測(cè)試。
Calabash-android
calabash-android 是一個(gè)基于 Cucumber 的 Android 的功能自動(dòng)化測(cè)試框架。Calabash 允許你寫和執(zhí)行,是開源的自動(dòng)化移動(dòng)應(yīng)用測(cè)試工具,支持 Android 和 iOS 原生應(yīng)用。Calabash 的庫(kù)允許原生和混合應(yīng)用的交互測(cè)試,交互包括大量的終端用戶活動(dòng)。Calabash 可以媲美 Selenium WebDriver。但是, 需要注意的是 web 應(yīng)用和桌面環(huán)境的交互跟觸摸屏應(yīng)用的交互是不同的。Calabash 專為觸摸屏設(shè)備的原生應(yīng)用提供 APIs。
Monkey
Monkey 是 Google 開發(fā)的 UI/應(yīng)用測(cè)試工具,也是命令行工具,主要針對(duì)壓力測(cè)試。你可以在任意的模擬器示例或者設(shè)備上運(yùn)行。Monkey 發(fā)送一個(gè)用戶事件的 pseudo-random 流給系統(tǒng),作為你開發(fā)應(yīng)用的壓力測(cè)試。
MonkeyTalk
MonkeyTalk 是世界上最強(qiáng)大的移動(dòng)應(yīng)用測(cè)試工具。MonkeyTalk 自動(dòng)為 iOS 和 Android 應(yīng)用進(jìn)行真實(shí)的,功能性交互測(cè)試。MonkeyTalk 提供簡(jiǎn)單的 "smoke tests",復(fù)雜數(shù)據(jù)驅(qū)動(dòng)的測(cè)試套件。MonkeyTalk 支持原生,移動(dòng)和混合應(yīng)用,真實(shí)設(shè)備或者模擬器。MonkeyTalk 使得場(chǎng)景捕獲非常容易,可以記錄高級(jí)別,可讀的測(cè)試腳本。同樣的命令可以用在 iOS 和 Android 應(yīng)用上。你可以記錄一個(gè)平臺(tái)的一個(gè)測(cè)試,并且可以在另外一個(gè)平臺(tái)回放。MonkeyTalk 支持移動(dòng)觸摸和基于手勢(shì)交互為主的移動(dòng)體驗(yàn)。點(diǎn)擊,拖拽,移動(dòng),甚至是手指繪制也可以被記錄和回放。
NativeDriver
NativeDriver 是 WebDriver API 的實(shí)現(xiàn),是原生應(yīng)用 UI 驅(qū)動(dòng),而不是 web 應(yīng)用。
Robolectric
Robolectric 是一款A(yù)ndroid單元測(cè)試框架,使用 Android SDK jar,所以你可以使用測(cè)試驅(qū)動(dòng)開發(fā) Android 應(yīng)用。測(cè)試只需幾秒就可以在工作站的 JVM 運(yùn)行。Robolectric 處理視圖縮放,資源加載和大量 Android 設(shè)備原生的 C 代碼實(shí)現(xiàn)。Robolectric 允許你做大部分真實(shí)設(shè)備上可以做的事情,可以在工作站中運(yùn)行,也可以在常規(guī)的 JVM 持續(xù)集成環(huán)境運(yùn)行,不需要通過模擬器。
RoboSpock
RoboSpock 是一個(gè)開源的 Android 測(cè)試框架。提供簡(jiǎn)單的編寫 BDD 行為驅(qū)動(dòng)開發(fā)規(guī)范的方法,使用Groovy 語(yǔ)音,支持 Google Guice 庫(kù)。RoboSpock 合并了 Robolectric 和 Spock 的功能。
Robotium
Robotium 是一款國(guó)外的Android自動(dòng)化測(cè)試框架,主要針對(duì)Android平臺(tái)的應(yīng)用進(jìn)行黑盒自動(dòng)化測(cè)試,它提供了模擬各種手勢(shì)操作(點(diǎn)擊、長(zhǎng) 按、滑動(dòng)等)、查找和斷言機(jī)制的API,能夠?qū)Ω鞣N控件進(jìn)行操作。Robotium結(jié)合Android官方提供的測(cè)試框架達(dá)到對(duì)應(yīng)用程序進(jìn)行自動(dòng)化的測(cè) 試。另外,Robotium 4.0版本已經(jīng)支持對(duì)WebView的操作。Robotium 對(duì)Activity,Dialog,Toast,Menu 都是支持的。
UIAutomator
uiautomator 測(cè)試框架提高用戶界面(UI)的測(cè)試效率,通過自動(dòng)創(chuàng)建功能 UI 測(cè)試示例,可以在一個(gè)或者多個(gè)設(shè)備上運(yùn)行你的應(yīng)用。
Selendroid
Selendroid 是一個(gè) Android 原生應(yīng)用的 UI 自動(dòng)化測(cè)試框架。測(cè)試使用 Selenium 2 客戶端 API 編寫。Selendroid 可以在模擬器和實(shí)際設(shè)備上使用,也可以集成網(wǎng)格節(jié)點(diǎn)作為縮放和并行測(cè)試。
網(wǎng)頁(yè)題目:android單元測(cè)試框架,手機(jī)測(cè)試框架
文章網(wǎng)址:http://chinadenli.net/article26/dsdiicg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、關(guān)鍵詞優(yōu)化、Google、網(wǎng)站制作、網(wǎng)站營(yíng)銷、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)