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