Android自動化 - 基礎總集
本筆記根據微信讀書的:《Android自動化測試實戰》
簡介
測試金字塔

金字塔模型將測試分為單元(Unit)、服務(Service)和用戶界面(User Interface,UI)這3個層級;在測試發展的歷程中,也出現了一些重新定義金字塔層級的測試模型,盡管對分層的具體描述各不相同(有人將這3個層級分別定義為單元、接口、集成測試,也有人將整個金字塔劃分為4~5個層級),但金字塔自底向上的結構是大家公認和遵循的。
單元測試
單元測試是針對代碼單元(通常是 類 或 方法 )的測試,單元測試的價值在于能提供快速的反饋,在開發過程中就可以對邏輯單元進行驗證。好的單元測試可以幫助改善既有設計,在團隊掌握測試驅動開發(Test Driven Development,TDD)的前提下,單元測試能輔助重構,幫助提升代碼整潔度。
服務測試
針對業務接口進行的測試,主要測試內部接口功能實現是否完整,比如內部邏輯是否正常、異常處理是否正確等,比如內部邏輯是否正常、異常處理是否正確等。
UI測試
UI測試是從用戶的角度驗證產品功能的正確性,測試的是端到端的流程,并且加入用戶場景和數據,驗證整個過程是否正確、流暢。
自動化測試
單元自動化測試
單元自動化測試指對軟件中最小的可測試單元進行檢查和驗證,調用被測服務的類或方法,根據類或方法的參數,傳入相應的數據,得到返回結果。單元自動化測試是最基本的測試之一,也是測試中的最小單元,它的對象是函數,可以包含輸入輸出,針對的是函數功能或者函數內部的代碼邏輯,并不包含業務邏輯。該類測試一般由研發人員完成,需要借助單元測試框架,如Java的JUnit、TestNG,Python的unittest、Pytest,等等。
接口自動化測試
接口自動化測試主要驗證模塊間的調用返回,以及不同系統、服務間的數據交換。接口自動化測試一般在業務邏輯層進行。所以,接口測試關注的是數據。常見的接口測試工具有Postman、JMeter、LoadRunner等。
UI自動化測試
UI層是用戶使用產品的入口,產品的所有功能通過這一層提供給用戶,目前測試工作大多集中在這一層,這種測試更貼近用戶的行為。所以,UI自動化測試的關注點是用戶操作行為,以及UI上各種組件是否可用。常見的UI測試工具有UFT、Selenium、Appium等。
Android
Android體系架構

應用程序層
Android會同一系列核心應用程序包一起發布,該應用程序包包括桌面、SMS短消息、日歷、地圖、通話、瀏覽器、聯系人管理程序等應用程序,都是使用Java語言編寫的。
應用程序框架層
開發人員可以完全調用核心應用程序所使用的應用程序框架。該應用程序的架構設計簡化了組件的重用,任何一個應用程序都可以發布它的功能塊并且任何其他的應用程序都可以使用其發布的功能塊(不過得遵循框架的安全性)。同樣,該應用程序重用機制也使用戶可以方便地替換程序組件。
系統運行庫層
Android包含一些C和C++庫,這些庫能被Android系統中不同的組件使用,并通過Android應用程序框架為開發者提供服務。
Linux內核層
Android運行于Linux內核(kernel)之上,但并不是GNU/Linux。因為一般GNU/Linux支持的功能,Android大多都不支持
Android的Linux kernel控制包括安全(Security)、內存管理(Memory Management)、過程管理(Process Management)、網絡堆棧(Network Stack)、驅動程序模型(Driver Model)等。
Android開發四大組件
活動(Activity)
用于表現功能,Activity是所有應用程序的根本,所有應用程序的流程都運行在Activity之中,Activity一般代表手機屏幕的一屏。如果把手機比作一個瀏覽器,那么Activity就相當于一個網頁。
服務(Service)
在后臺運行,不提供界面呈現。Service是Android系統中的一種組件,它跟Activity的級別差不多,但是它不能自己運行,只能在后臺運行,并且可以和其他組件進行交互,Service是沒有界面的長生命周期組件
廣播接收器(Broadcast Receiver)
用于接收廣播。在Android中,Broadcast是一種廣泛應用的、用于在應用程序之間傳輸信息的機制。而Broadcast Receiver是對發送出來的Broadcast進行過濾、接收并響應的一類組件。
內容提供商(Content Provider)
支持在多個應用程序中存儲和讀取數據,相當于數據庫。Content Provider是Android提供的第三方應用數據的訪問方案。Android對數據的保護是很嚴密的,除了放在SD卡中的數據,一個應用程序所持有的數據庫、文件等,都是不允許其他應用程序直接訪問的。Android當然不會真的把每個應用程序都設計成一座孤島,它為所有應用程序都準備了一扇窗,這就是Content Provider。
App的類型與區別
Native App:
Native APP指的是原生程序,一般依托于操作系統,有很強的交互,是一個完整的App,可拓展性強,需要用戶下載安裝使用。(簡單來說,原生應用是特別為某種操作系統開發的,如iOS、Android等,它們是在各自的移動設備上運行的)。該模式通常是由“云服務器數據+APP應用客戶端”兩部份構成,APP應用所有的UI元素、數據內容、邏輯框架均安裝在手機終端上。
Web App
Web App是基于Web的系統和應用程序,運行于網絡和瀏覽器之上,目前多采用HTML5標準開發,無須下載和安裝。
Hybrid App:
混合應用程序(Hybrid Application,Hybrid App)是結合了原生應用程序和Web應用程序兩者的元素的軟件應用。混合應用程序本質上是帶有原生應用外殼的Web應用。一旦用戶從應用商店下載應用并在本地安裝,外殼就會通過嵌入在應用中的瀏覽器連接到移動平臺提供的任何功能。瀏覽器及其插件在后端運行,對最終用戶是不可見的。

測試框架
Instrumentation
Android自帶的一個測試框架,是很多測試框架的基礎,可以在同一個進程中加載被測組件。它有很多豐富的高層封裝,你可以使用基于Instrumentation的其他框架,避免過多二次開發。但Instrumentation不支持跨App使用,基于Instrumentation開發的框架都“繼承”了這個缺點。
Espresso
Espresso是Google的開源自動化測試框架。相對于Robotium和UIAutomator,它的特點是規模更小、更簡潔,API更加精確,使用者編寫測試代碼更簡單,容易快速上手。因為它是基于Instrumentation的,所以不能跨App使用。
Robotium
是基于Instrumentation框架開發的一個更強的框架。該框架對常用的操作進行了封裝。
優點:容易讓使用者在短時間內編寫出測試腳本,易用性高;支持自動跟隨當前Activity;由于運行時會綁定到圖形用戶界面(Graphical User Interface,GUI)組件,所以相比Appium,它測試時執行速度更快,功能更強大;即使用戶不訪問代碼或不了解App實現,也可以使用;支持Activity、Dialog、Toast、Menu、ContextMenu和其他Android SDK控件。
缺點:不能測試Web組件;在舊設備上測試執行速度會變得很慢;不支持iOS設備;沒有內置的記錄和回放功能。
UIAutomator
UIAutomator是由Google提供的測試框架,它提供了Android Native App和手游App的高級UI測試。這是一個包含API的Java庫,可以用來創建功能性UI測試,還有運行測試的執行引擎。該庫自帶Android SDK。
優點:在訪問不同的進程時,會給JUnit測試案例特權;測試庫由Google社區支持和維護。
缺點:僅支持Android 4.1(API level—16)及以上版本;不支持腳本記錄,不支持Web視圖,僅支持使用Java,因此很難和使用Ruby的Cucumber結合,如想支持行為驅動開發(Behavior Driven Development,BDD)框架,建議使用Java自己的BDD框架,例如JBehave。
Calabash
Calabash是一個適用于iOS和Android設備的跨平臺App測試框架,可用來測試屏幕截圖、手勢和實際功能代碼。Calabash開源并支持Cucumber,Cucumber能讓用戶用自然的英語表述App的行為,實現BDD。Cucumber中的所有語句都是使用Ruby定義的。
優點:有大型社區支持;列表項簡單,有類似英語表述的測試語句,支持在屏幕上能夠實現的所有動作,如滑動、縮放、旋轉、敲擊等;支持跨平臺開發(同樣的代碼在Android和iOS設備中都適用)。
缺點:某一步驟測試失敗后,將跳過所有的后續步驟,這可能會導致錯過更嚴重的產品問題;測試耗費時間,因為它總是默認從安裝App開始;需要將Calabash框架安裝在iOS的.ipa文件中,因此測試人員必須要有iOS App的源碼;除了Ruby,對其他語言不友好。
Appium
Appium是一個開源、跨平臺的自動化測試工具,支持iOS、Android和Firefox OS平臺。通過Appium,開發者無須重新編譯App或者做任何調整,就可以測試App,可以通過測試代碼訪問后端API和數據庫等。它是通過驅動iOS的UIAutomation和Android的UIAutomator框架來實現跨平臺支持的,同時綁定了Selenium WebDriver用于支持對早期Android平臺的測試。開發者可以使用Selenium WebDriver兼容的任何語言編寫測試腳本,如Java、Objective-C、JavaScript、PHP、Python、Ruby、C#、Clojure和Perl語言等。

浙公網安備 33010602011771號