文 高博
Android系統的廣泛傳播得益于其開源的特性,但這一特性同時也帶來了一個比較嚴重的問題,就是設備的碎片化。
隨著我國經濟的持續發展以及我國一些手機研發公司的崛起,尤其近年來中興、華為、聯想、酷派等公司的發展,加上新興的小米、OPPO等手機設備公司,逐步參與手機研發體系,并期望在世界手機行業中占領自己一席之地。我國工信部4G牌照的發放,也使得我國手機行業迎來較快的發展。Android作為一款主流的智能設備的操作系統,憑借開源性、拓展性、可移植性等特點席卷全球。我國已經掌握了Android手機的基本設計與制造技術,形成了一定的研發能力,近年來華為、小米等公司投入巨大的研發資源,取得了一系列創新成果。如由本土公司自行設計、自行研發的一些手機,正在逐步打破蘋果、三星等高端手機的壟斷。
Android系統的廣泛傳播得益于其開源的特性,但這一特性同時也帶來了一個比較嚴重的問題,就是設備的碎片化。和同類產品相比,運行蘋果公司的iOS系統的設備截至目前不超過20種,而且所有的設備都是從軟件到硬件高度統一的。而運行Android系統的設備卻多達數千種,并且軟件和硬件都經過深度定制,甚至同一廠商制造的設備都會有多達幾十種不同的軟硬件定制版本。對于Android應用的開發者而言,這樣數量眾多的軟硬件環境,是一個巨大的挑戰。而應對這種挑戰的重要手段,就是規模化的適配性測試。適配性測試就是指使用同樣的一批測試用例,針對同一個測試對象,運行在不同的軟硬件平臺上,收集和分析測試結果的測試方法。
與歐美等國家相比,我國的Android應用程序研發水平存在一些差距,其中差距最大的就是適配性測試技術。由于多種原因,測試,特別是自動化測試受成本和技術的約束,在我國受重視程度遠遠不及歐美一些國家。上海盛大創新院等公司近年來大力推廣Android智能設備自動化測試,使得Android智能設備測試體系與技術含量等方面已經具有一定的基礎。尤其是在Android智能設備適配性自動化測試取得一些成績,為此,本文將針對Android設備適配性自動化測試進行理論研究與開發探索,力爭在Android設備適配性測試關鍵技術上有所創新,主要是在設備自動化管理,和測試用例的撰寫、執行等方面取得了經過驗證的成果,達到了Android設備適配性測試技術領域的先進水平。
本文以上海盛大研究院的Android適配性自動化測試的實際業務和項目為背景,對Android適配性自動化測試的業務需求以及系統功能進行分析與定義。
Android適配性自動化測試平臺一般由雙層Web Server系統、圖片比對自動化測試系統和可錄制編程的自動化測試系統組成,本文針對用戶使用習慣和邏輯,歸納總結系統的最主要的五個業務進行重點討論:用戶登錄功能需求、Lab Server的功能需求、Web Server的功能需求、錄制編譯腳本模塊的功能需求、圖片比對自動化測試模塊其他相關業務也將進行簡單分析。
從實現質量屬性可分為可用性、易用性、可測試性戰術,主要功能具有可擴展性、穩定性、可維護性和可操作性。
在Android適配性自動化測試系統中,定義的用戶有測試工程師、測試經理兩種身份。每個用戶有自己的職責和范圍,根據職責和范圍可對Android適配性自動化測試系統的相關功能進行操作與管理。
測試工程師的用例圖如圖1所示。

測試經理的用例圖如圖2所示。

用戶登錄功能的實現分析
用戶通過瀏覽器輸入IP地址,然后輸入用戶名和密碼登錄Lab Server,再由Lab Server通過Web Server登錄到Agent Server上,進行配置Agent對應的Android設備,根據測試用例進行操作,然后記錄測試結果,測試結束后進行退出當前的測試登錄。
用戶登錄主要功能需求是測試能否正確識別用戶輸入用戶名和密碼能登錄系統,輸入任一錯誤的用戶名和密碼都不能登錄系統。另一個功能需求是測試管理員能否增刪查改等功能,對不同的用戶設置不同的權限。用戶登錄功能需求的流程如圖3所示。


Lab Server的功能實現分析
用戶通過瀏覽器輸入IP地址,然后輸入正確用戶名和密碼登錄Lab Server,再由Lab Server通過Web Server登錄到Agent Server上,進行配置Agent對應的Android設備,根據測試用例進行操作,然后記錄測試結果,測試結束后進行退出當前的測試登錄。
雙層Web Server模式系統主要體現為用戶通過網頁登錄到Lab Server之后,然后去選擇對應連接的手機,同時通過Agent方式來訪問對應的手機設備,而訪問Agent對應的手機設備也是通過網頁方式打開,這樣做的目的就是可以通過網頁登錄增加手機的無限擴展,理論上只需要Server性能足夠強大。
基于Lab server功能需求的過程如圖4所示。


Web Server功能實現分析
在雙層Web Server模式系統,它采用了一系列的技術手段,實現了將觸控手機屏幕和實體按鍵的操作轉化為采用鍵盤和鼠標操作Web上的回顯界面,并且這種操作是全雙工的(Multiplex)。全雙工的意思是,在Web界面上的操作會反饋到手機界面上,而手機上的界面變化也會反饋到Web界面上。這個功能的實現,依賴于在內層Web服務器上運行的一個守護進程,這個進程會做兩件事,一是把Web上的Web鍵盤和鼠標事件,通過Python調用Robotium來轉化成手機觸控事件,這是從Web到手機;二是把手機屏幕不斷截屏,發回內層Web服務器以供Web界面顯示,這個守護進程和內層Web服務器是兩個程序,但它們運行在同一個機器上,流程如圖5所示。
錄制編譯腳本模塊的功能實現分析
由于測試用列比較多,測試工程師手動測試耗費大量人力物力,系統要解決的核心問題,主要是適配性測試中的兩個問題:設備管理問題,還有測試用例數量眾多而且重復的問題。解決的手段就是自動化,這個自動化和傳統意義上的自動化有所不同。傳統意義上的自動化,僅僅指把手工執行的用例落實成腳本,然后用執行腳本來代替手工執行。而本系統的自動化,卻是全方位的自動化。
腳本自動化錄制傳統意義上的自動化測試對測試人員的要求很高,核心是要求會寫腳本,而本系統提供了腳本錄制功能,用戶可以執行一些操作,這些操作就會自動地被錄制成腳本,還可以針對腳本中的任何指定部分,加上條件判斷和循環。這樣幾點加在一起就解決了測試用例眾多的問題,因為可以同時對N部設備執行同一批腳本,還可以隨時查看結果,腳本本身還可以通過錄制而不是手寫實現。
安裝和腳本運行自動化這個功能也是通過內層Web服務器提供給用戶的,用戶只要上傳一個APK文件,這個文件就會被自動安裝,并執行指定的一系列冒煙測試,如安裝、啟動、退出、升級和卸載等。只要上傳一個python腳本,就可以執行這個腳本包含的任意內容,實現傳統意義上的自動化測試功能。還可以指定運行腳本的時間點,這樣就可以在夜間實現無人值守的自動化測試。我們首先要連接測試工程師已經打開調試模式的ANDROID設備或模擬器,然后運行一些腳本,例如在cmd窗口中執行命令:Monkeyrunner Monkeyrecoder.py,執行一定的代碼后,將運行錄制腳本的程序。我們還根據總結測試工程師常用的函數,寫好之后,再次編譯和嵌套錄制腳本,這樣就可以循環運行腳本,達到一些回歸測試和壓力測試的需求。流程如圖6所示。
在手機的自動化測試,對結果的判斷是難點,最初級的辦法無非是基于圖像比對了,Monkeyrunner自身提供了一套圖像比對的機制,加載一個正確結果的圖片MonkeyRunner.LoadImageFromfile(“filepath”)。然后用sameAs來比對,當然也可以用局部圖像比對。得到局部圖像的方法getSubImage。
Monkey和Monkeyruner是Android提供的兩個自動化UI測試工具。它們的測試原理都通過編寫腳本,模擬用戶按鍵然后記錄響應結果。它們最大的價值是可以做無人值守的自動化測試。具體流程如圖7所示。

其他的功能實現分析
基站衰落自動化測試系統除了上述主要業務以外,還有重啟基站業務、獲取基站配置數據等業務。
測試UE在極端情況下,比如UE在運動旋轉的支架上進行測試,測試能夠忽略電源變化的狀態圖。
測試忽略電源變化,主要是實際測試工作的需要,不必比較,主要在圖像比較的時候,剔除電源區域的比較。
第一步找到設備圖片的電源的位置;
第二步進行圖片比較時,找到設備圖片的電源的位置,進行忽略此圖片的變化。
區分游戲主、輔界面
在游戲界面我們設定了游戲主界面和輔界面之分,針對主界面判定之后,我們集中比對輔界面變化和操作,這樣比對相應會更準確和更快,更能完成測試用例的操作。
第一步在游戲測試過程中,根據圖片變化的幅度確定主、輔界面;
第二步確定游戲界面的主、輔界面之后,同時監控主輔界面,如主界面變化幅度不大,則會忽略主界面的比較,直接比較輔界面變化;
第三步直到主界面變化幅度過大,則重新比較主、輔界面,進入下一個比較流程。流程如圖8所示:

非功能性需求的功能實現分析
系統把手動操作變成腳本之后,需要進行一定的修改,編譯通過之后才能運行,在實際運用過程中,由于測試工程師的自動化腳本水平參差不齊,導致腳步格式眾多,即使同一個功能,不同的工程師編寫風格也不一樣,導致腳本不統一,運行效果也不一樣。同時一些函數腳本寫起來對于沒有編程背景的人來說也是比較困難的。
本系統除了具備滿足功能性需求時提供的特性之外,同時通過制定測試的操作規程,盡量減少干擾,來避免非正常腳本編寫錯誤和腳本編寫不統一的情況的發生。
由于適配性測試需要不同的手機或者平板等設備,同時不同的手機或者平板的生產廠商,系統版本也不相同,選擇適配性自動化操作的業務也有所不同。隨著適配性自動化業務的增長,還有會測試不同的手機或平板等設備,測試不同手機或平板等設備版本的功能。在適配性自動化測試的系統設計時,不僅要考慮使系統滿足測試工程師自動執行用例的需求,更需要從易于擴展的思維來規劃,根據不同的手機或平板的差異,在不需要更改平臺的服務器的大的設備情況下,只需要增加被測試設備和增加外圍系統配置,就可以達到橫向擴展的目的。為不同手機設備的選擇和同一手機不同的手機系統版本,降低上層系統和不同手機之間的操作的耦合程度。
基于適配性測試自動化測試系統是自己寫腳本開發的,不需要多指令化界面,對于測試工程師來說只需要掌握界面操作,所以對于測試工程師來說,提供配置參數較少、容易操作的界面,針對其他用戶,第一次配置好參數后,再次配置時,有數據記憶功能,符合測試工程師操作習慣,省去測試工程師的精力和時間,同時也減少測試工程師的操作失誤的可能。
針對同一手機不同的系統版本,只需要參考自動化系統配置的手機系統的版本,就可以在界面上選擇對應的系統版本,這樣不需要更換手機設備就能測試多個手機軟件系統。考慮到測試工程師操作測試任務繁重性,一般使用測試時間戳來記錄測試時間,并記錄測試log,增加便利性。同時對于測試結果,更多的讓測試工程師用圖形化界面來展示出來,一眼就看出測試結果和與歷史測試結果進行比對。因此系統還需要在不增加系統開發工作量的前提下,需要滿足測試工程師易用性的需要。
在增加大量的手機或平板等設備之后,需要大量的通信去調度,需要很多線程來完成多個任務的調度。在開發系統之前,需要充分考慮系統穩定性,如果多個手機或平臺等設備線程增多等,會很耗費內存,這樣會導致測試不準確,系統和手機或平板等設備之間進行通信,傳輸時間和傳輸效果需要考量,因此對通信過程的穩定性要求較高,需要防止通信指令傳輸失敗,產生意外的后果。除此之外,圖片比較也需要一定的穩定性,系統的穩定需求對系統設計來說也是很重要的一個方面。
系統架構設計與實現
系統的體系結構
Android適配性自動化測試系統的體系結構可分為如圖9所示的四層。

系統的第一層為應用層,主要是用戶通過瀏覽器輸入IP地址,通過HTTP協議登錄到Server上,進行測試相關操作。也可以在Server上瀏覽和查看測試結果。
第二層為Server層,主要接受到應用層的指令和操作,來進行響應和回應,這一層是系統的核心,主要用到的協議有HTTP,TCP,TELNET等協議。
第三層Agent層,此層主要是橋梁連接作用,把Server層的指令通過Agent代理傳到具體制定的任一Android設備上,然后Android設備響應再通過Agent代理傳到Server。
第四層就是Android設備連接層,主要通過USB連接器或者直接連接到測試工程師的電腦上進行測試的Android設備。此層主要的好處在于,在系統性能可以承受的許可下,擴展到許多個Android設備。
系統的軟件架構
Android適配性自動化測試系統的軟件系統包括Lab Server、Web Server、Agent Server、圖片比對系統、自動化錄制編譯系統。Android適配性自動化測試系統的軟件系統結構如圖10所示。

Lab Server子系統,用戶通過瀏覽器輸入IP地址,然后輸入正確用戶名和密碼登錄Lab Server,再由Lab server通過Web Server登錄到Agent Server上,進行配置Agent對應的Android設備,根據測試用例進行操作,然后記錄測試結果,測試結束后退出當前的測試登錄。
雙層Web Server模式系統主要體現為用戶通過網頁登錄到Lab Server之后,然后去選擇對應連接的手機,同時通過Agent方式來訪問對應的手機設備,而訪問Agent對應的手機設備也是通過網頁方式打開,這樣做的目的就是通過網頁登錄可以增加手機的無限擴展,理論上只要Server性能足夠強大。
Agent Server子系統,此系統主要是橋梁連接作用,把Server層的指令通過Agent代理傳到具體制定的任一Android設備上,然后Android設備響應再通過Agent代理傳到Server。
圖片比對子系統功能主要采用了Monkeyrunner技術,利用Java Script與Python互相轉換的功能來達到所設計的需求和功能,用戶通過Web Server進行操作一個動作,Web把操作的一個動作轉換成一個指令;轉換成一個指令后,傳給Executor,而傳給Executor通過Agent server來控制設備UE;設備UE接到Executor傳輸的指令后,進行執行指令的操作,并把操作后的結果通過Agent傳給Executor;操作后的結果通過Agent傳給Executor之后,Executor通過截圖軟件,把設備UE的操作和響應結果的圖片返回給Web Server;Web Server接到操作和響應結果的圖片之后進行比對,然后進行下一個操作。
自動化編譯子系統,主要分腳本錄制器和自動編輯功能。測試工程師搭建測試環境;測試工程師手動操作,這個時候錄制手動操作并記錄代碼;根據手動操作的測試用例,推薦匹配的函數,如重啟多少次等;如果不使用推薦函數,則需要測試工程師手動完成編譯,并生產測試用例;如使用推薦函數,可以自動編譯,自動運行腳本,開始編譯,編譯通過之后并生產測試用例;腳本錄制完成后,開始下一個錄制腳本的測試用例。設定的測試用例錄制完成。結束。等待自動化測試。
結論
本文對Android適配性自動化測試系統的功能需求進行了細致地分析,確定具體的功能方面的設計、開發與實現的要求與標準;之后對重點設計了Android適配性自動化測試系統的體系架構、軟件架構進行了詳細分析與設計。