我們已經學會了一些Espresso基本的使用後,我們也寫了一些test,但是每次都在Local只有自己看得到結果,如果Application只有自己一個人開發那每次開發到一個段落後再做測試沒問題,反正本來測試結果也只有自己會看。但是如果在多人共同開發的商業Application,那只在自己本機的Local做測試的方式可能就行不通了。因為大家共同開發的東西可能會互相影響,你只測你改的部份可能沒問題,如果是整合別人的code進來一起測試就不一定了,所以我們需要一個定期測試development branch的程式來做一個整合性的測試,這就是CI/CD持續整合及發佈流程中的一個範疇,其中比較多人使用的就是Jenkins,就算沒用過也應該有聽說過。
講到這裡可能會想說做個測試還要自己搞DevOps的工作真麻煩,其實在Local架Jenkins一點都不難,因為Jenkins已經幫我們打包好一個安裝檔,安裝完成並不困難。比較麻煩的是設定的部份,必竟Jenkins不是專門為Android設計的工具,還是需要一些功夫才能開始測試。安裝的方式請參考中文官網https://jenkins.io/zh/ 本章節會關注在如何設定讓Android application可在Jenkins上進行測試。本章的範例會用目前工作的專案來示範,因為是private repository所以大家必須開自己的Github的專案來練習與Jenkins的連線。
一開始安裝完畢後,點開Jenkins並且登入後會進入到主畫面,如果還沒開過任何一個作業右邊的View會是空白的,我們要開始新的一個作業的話,點擊左方的新增作業。
輸入你的作業名稱跟選取free-style類別
在General的Tab裡我這邊勾選忽略舊Build,因為每次Jenkins在build的時候會產生cache,選取這個選項可以幫我們把cache清除。我這裡的條件是設置清除超過7天或20次前的build。
在第二個Tab原始碼管理裡面,我們要選取Git。Repository URL請填上你的github repository SSH或HTTP位址,Credentials這個項目如果你連線的是private repository請選取Add進行認證。如果是public repository則不用認證即可使用。
在Branches to build的地方請填入你想要Build的branch位置,例如origin/master,如果你不填的話Jenkins的套件會預設幫你把全部branch都build一次。
點選Credentials Add按鈕後,Github帳號應該都是用SSH的認證方式,請把username/passowrd加入後回到上一個步驟去選取這個Acoount連線你的private repository。
第三個Tab建置觸發程序中,可以依需求設定讓Jenkins自動build code的條件,例如選取Pull Request選項,當有人想要對這個branch發Pull Request時候,Jenkins就會自動執行build code。
第四個Tab建置環境是本章設定模擬器的重點,首先我們先選取Run an Android emulator during build。點選後會展開兩個項目
Run emulator with properties的config如下
在Common emulator options有三個選項可以使用如下
在第五個Tab建置部份,使用Gradle Wrapper這樣可以輸入gralde task
Pandroid.testInstrumentationRunnerArguments.class="your testing class" connected"Build Variants"AndroidTest
例如Pandroid.testInstrumentationRunnerArguments.class=com.daniel.demo.test.DemoTest connectedStagingDebugAndroidTest,其中com.daniel.demo.test.DemoTest就是我的test class path。這裡有一些指令可以方便讓我們指定測試範圍
指定多個測試class
Pandroid.testInstrumentationRunnerArguments.class=class1,class2,class3
指定測試function
Pandroid.testInstrumentationRunnerArguments.class=class#function name
而StagingDebug是我的BuildVariant(productFlavors+buildTypes),如果你的Application沒有指定Build Variant的話可以直接使用connectedAndroidTest(或是簡寫cAT)就好。
最後我們可以回到專案目錄去點選馬上建置在Jenkins上執行測試。
測試的結果我們可以選擇Console Output去看Log
經由本篇介紹後在Jenkins執行Android test也沒那麼難,本篇是用Integration Test來示範,你另外也可以把單元測試的部份利用Jenkins來跑,不用模擬器會比本篇講的步驟更簡單一點,gradle指令需要修改的部份就留給大家自己做功課。
下一個章節我們會進入End to End Test的部份,來講講同是UI測試,Integration Test跟End to End Test差別在哪。