背景:前段時間本項目安卓端的QA離職,我接替該同事的工作進行項目安卓端的測試。而測試負責的很大一塊內容就是安卓UI自動化測試,之前安卓端的UI自動化工程集成了若干個測試用例已經能夠在jenkins持續集成平臺上比較穩定地構建和執行了。接下來新版本發布,要繼續維護UI自動化用例,能夠從用戶操作的層面實時地監控安卓端版本的項目質量。對我來說,做好安卓端測試的一個重點就是安卓UI自動化工程的交接和維護。我的情況是僅有java開發基礎,對于android開發沒有涉及過,對于UI自動化更是不懂。因而是個實實在在的菜鳥。可我不會輕易狗帶。一起開始安卓UI自動化學習之旅吧。
我的學習路線是這樣安排的:
(一)本地:能夠獨立完成一個UI自動化工程的建立
(二)本地:命令行執行UI自動化測試用例
(三)本地:ant打包測試工程apk+執行UI自動化用例一體化
(四)jenkins:持續集成平臺成功構建UI自動化工程
(五)jenkins:真機換成模擬器
(六)jenkins:持續集成平臺實現被測apk自動打包編譯+自動化一體化
(七)UI自動化用例編寫語法和規范
本章內容就是第一部分,本地:獨立完成一個UI自動化工程的建立
一,準備工具和材料
在正式開始之前,先梳理一下一個簡單的UI自動化工程所需要的材料。
通常情況下,eclipse和android studio都可以用做開發環境,為了與之前的一致,我選擇使用eclipse開發。被測應用有源碼最好,沒有源碼的時候使用apk一樣可以進行UI自動化測試。UI自動化測試的一個最基礎的框架是robotium,orange是基于robotium的二次封裝,核心的部分沒有改動,只是增加了自動重簽名和在用例運行失敗的時候自動重跑的功能。要清楚的一點是,被測應用是單獨的apk,測試工程也要打包成一個apk,這兩者是獨立的。本文后續用被測應用和測試工程來區分兩者。需要工具和材料僅這些:
(1) 開發環境:eclipse+ADT,可參考教程。
(2) 第三方Jar包:robotium,orange
(3) 被測試程序包:重簽名的被測應用apk。
(4)一個真機:將重簽名后的apk安裝到真機上,且數據線連接好真機與PC。
(可利用重簽名工具re-sign.jar。為什么要重簽名呢?本機的eclipse對UI自動化工程打包的時候使用的是本機的debug.keystore簽名文件,一般存放于C:\Users\yourUserName\.android目錄下。而正式發布的被測應用apk通常會使用特定的keystore簽名文件。這兩者不統一,必然是不能用前者去測試后者的。另外注意,發布好的被測應用apk有時候開發者們會選擇gradle打包,這種情況下對apk進行重簽名,會有導致手機上打不開應用。使用ant打包的apk重簽名就OK 。)
二,建立UI自動化工程的整體框架
2.1創建測試工程
前面說過了,測試工程也是一個安卓工程,所以我們需要在eclipse中點擊File-〉New-〉Android Application Project,建立一個安卓工程。
填寫安卓工程的相關信息,包括應用名稱和應用包名等。SDK選擇4.0以上,其他使用默認值即可。一路點擊next,直至Finish。
2.2配置Build Path
在libs目錄下加入已經準備好的robotium和orange的jar包,如果沒有libs建議可以手動新建,當然不建立也可以。在Build Path中添加libs中的jar包,或者存放于其他文件夾中的jar包。
點擊Add JARs,將libs下的幾個jar都加入到BuildPath中。點擊Ok完成即可。
2.3配置Manifest.xml
在原有xml的基礎上增加<instrument>、<uses-library>和<uses-permission>標簽,注意instrument標簽中需指定被測應用apk的包名和測試應用apk的包名。
2.4編寫測試用例
由于我們現階段的重點不是語法和規范,是在整體搭建框架上的熟悉,因而我們寫一個最簡單的測試用例。
在project->src->package name處右鍵new->class,輸入測試用例類的名稱,在Superclass處點擊Browse:
在filter欄里填寫ActivityInstrumentationTestCase3,表示我們新建的這個類是ActivityInstrumentationTestCase3這個類的子類,能夠重寫和復用基類的方法。選擇第一個出現的匹配項,點擊OK。測試用例類建立完畢。
剛開始類上面會有小岔號,表示沒有構造函數,后面我們會補充。我們把R.java文件加入進來,在寫測試用例的時候會用到。如果把R.java文件加到com.example.androiduitest這個包下的會,會報錯:R.java文件重復。這是因為安卓工程都會在gen目錄下的com.example.androiduitest包下生成一個R.java文件,當然就會重復咯。所以我們需要再新建一個package,比如com.example.test,把R.java文件放到這個包內就可以。
輸入如下簡單的測試用例代碼:
注意構造函數時調用super(A,B),其中A是待測應用的程序包名,B是待測應用的啟動activity。另外馬賽克的部分是對應被測應用的package名字以及被測應用的Activity名字。
具體的測試用例書寫規范與語法,我們可以暫時忽視,到后面的階段再深入。
2.5執行測試用例
在真正執行測試用例前,要做兩個地方的配置,分別是Build Path-> order and export選中需要的jar包,另一個就是run configurations-〉設置好instrumentation。分別如下圖所示:
此外,還需要在已選擇好的真機設備上安裝上已經重簽名的被測應用apk,利用數據線和adb將真機設備與PC端連接好,且保證屏幕劃開不黑屏。
設置完畢后,就可以執行啦!
在FirssTest.java右鍵run as->Java Junit Test,在彈出的頁面中選擇已安裝好重簽名應用的真機設備,開始執行即可。
執行的時候我們可以看到首先會打一個測試應用的apk安裝到真機設備上,然后就開始測試我們的被測應用,被測應用像是被一個“無影手”一樣操控著打開、點擊某個按鈕、關閉。迄今,我們已經能夠建立一個最最基本的安卓UI自動化測試工程了,接下來就是第二篇,用命令行來執行我們的測試用例了,gogogo!