1.1 Appium 概述
Appium 是一個開源、跨平臺(測試程序跨平臺、支持多平臺上的app測試)、多語言支持的(開發語言)移動應用自動化工具。
1.1.1 測試對象
Appium 的測試對象包括:原生 app,混合 app,移動 web app(就是用手機瀏覽器打開的網址);
所謂原生 app,就是專門針對某一類移動設備而生的,所有界面和代碼都是專門為平臺設計的。比如說我們手機上自帶的計算器應用,它的代碼和界面,就都是用安卓開發語言 java 使用安卓開發庫開發出來的。而混合 app 主要是指它的一部分是原生界面和代碼,而另一部分是內嵌 web app。開在基本上打開網頁瀏覽的 app 都是混合 app,比如微信、支付寶、開發者頭條等。微信的消息界面是原生代碼實現的。而打開某個朋友圈,或者打開別人發來的鏈接部分是 web 部分,內嵌了一個瀏覽器內核,由瀏覽器內核實現的。現在混合型 app 很多,稍微功能全一些的都需要具備網頁瀏覽器的功能。而 web app 則完全是手機瀏覽器里打開的一個網址,大家可能會問,網址怎么是一個 APP ?
App 的概念其實非常廣泛,現在說到 App,大家認為是手機 App。其實這樣理解很狹義,App 就是應用的意思,所有的應用程序都是 App ,這里面當然也包括 web 網頁應用。Web App 只能運行在瀏覽器里,靠瀏覽器解釋執行。它其實就是一個觸屏版的網站。
1.1.2 測試對象 App 運行平臺
Appium 的測試對象運行平臺包括:
- iOS (就是蘋果手機、平板、甚至 iWatch 等移動設備上運行的 app)
- Android (就是安卓手機、平板、等移動設備上運行的 app)
- Windows (就是 Windows 手機、平板燈移動設備上運行的 app,但是這種平臺使用人數目前太少,少到基本可以忽略不計了。)
- FirefoxOS (更少,更加可以忽略不計了)
1.1.3 測試對象 App 運行環境:
Appium 的測試對象運行環境包括:
- 真實設備
- 模擬器
真實設備大家都知道,就是蘋果安卓的手機、平板等移動設備。而模擬器則是通過在 PC 或者 Mac 電腦上的軟件模擬的,蘋果安卓的手機、蘋果等移動設備。主要是方便我們測試用的。
1.1.4 測試程序語言:
appnium 支持多種程序語言開發測試程序,基本上 Selenium 支持開發的語言,appium 都支持,比如:pyhton、java、Ruby、js、php、C# 等。
1.1.5 測試程序運行平臺
appnium 支持測試程序運行在多種平臺上,包括:Windows、Linux、Mac OS等。但是要注意的是,如果測試的是 iOS 應用,測試程序本身是可以運行在所有平臺的,但是有 appium server 必須要運行在蘋果的機器上,比如筆記本 MacBook,或者臺式機 iMac。
appium server 本身是 js 開發的,也是跨平臺的。但是對蘋果設備的自動化,appium 依賴蘋果的自動化框架,也只能運行在蘋果機器上。
1.1.6 自動化原理
我們先來看一下 appium 自動化的架構圖:
這幅圖,包含了3個主體部分。
Test script:
這是我們的測試程序,是測試邏輯的實現部分。就像以前我們的 selenium 自動化腳本。而且和 selenium 一樣,可以使用多種語言,Appium 客戶端也支持多種語言。一般運行在 pc、laptop上,或者蘋果筆記本,臺式機。
Appium Server:
這是一個 JavaScript 代碼實現的程序。是運行在 Node.js 里面的。Node.js 就是 js 程序的一個解釋器,就像 Python 解釋器和 python 程序的關系一樣。可能有人會困惑,js不是運行在瀏覽器里面的嗎?其實 js 是通用的語言,瀏覽器里面有 js 的解釋器,同樣可以將解釋器單獨拿出來作為一個程序運行 js 代碼,運行的 js 代碼也可以不僅僅是和 web 相關的,可以是任何目的的代碼,就像 python,java 一樣。
被測試 app:
運行在真實設備或者模擬器中。這個測試系統運行起來交互關系是這樣的:測試程序(Test scrip),告訴 Appium Server 要做什么操作。比如要去點擊界面的一個元素。怎么告訴 Appium Server ?它們之間有 http 的連接,通過 http 請求發送命令給 Appium Server ,Appium Server 接收到測試程序的命令后,再發出命令給設備上運行的控制程序(這程序由Appium Server注入到設備里面運行),控制程序調用相應自動化庫里面的方法去執行界面的控制。
-
Android 底層自動化工具
我們看一下安卓的底層自動化工具。版本 2.3 - 4.1:使用的是 Selendriod 工具(這些系統已經很少了,可以忽略了)
4.2+:使用的是 UiAutomator,(目前 4.2+ 版本的安卓占了 90% 以上的市場份額,所以我們后面講的都是 4.2+ 安卓版本)。
當我們執行安卓自動化應用的時候
- IOS 底層自動化工具
在 IOS 9.3 版本之前,蘋果使用自動化技術叫 UIAutomation。
iOS 9.3+ 以后蘋果推出了 XCUITest 測試技術。
iOS 10 蘋果完全去掉了以前的 UIAutomation 的技術支持。所以現在,我們要進行蘋果 app 的自動化,只能使用 XUCITest。