提示:我們前面說的Android環境搭建和
adb
命令都是為移動端自動化測試環境搭建做准備的。
1、主流的移動端自動化測試框架
(1)Robotium
- 支持語言:
Java
- 僅支持Android系統。
- 不支持跨應用。
(2)Macaca
- 支持語言:
Java
,Python
,Node.js
- 支持Android和iOS系統。
- 支持跨應用。
(3)Appium
- 支持語言:
Java
,C#
,Python
,php
,perl
,ruby
,Node.js
- 支持Android和iOS系統。
- 支持跨應用。
2、自動化測試工具的選擇
自動化測試工具選擇的關注點有以下幾點:
- 是否支持
native
,webview
。 - 是否支持獲取
toast
。 - 是否支持跨應用。
native
,webview
,toast
說明(重點):
(1)native
:表示APP原生頁面。
- 使用Android/iOS支持的語言編寫頁面。
Android是Java
語言。
iOS 是Object-C
語言。 - 優點:頁面打開速度快。
- 缺點:更新復雜。
當你修改了原生頁面,需要重新發布的話,就需要重新發布到應用市場上,無論APP修改了什么,哪怕是一點點原生頁面,都需要重新發布。需要應用市場平台審核,審核需要一定時間。
在用戶方面,更新需要用戶升級或重新下載APP。
(2)webview
:簡單理解就是APP中的H5頁面。
- 使用前端技術編寫的頁面。
- 優點:更新方便。
進行修改,不需要重新發布應用市場,webview
頁面在我們自己的服務端就可以自行更新。 - 缺點:打開速度慢,需要加載頁面的很多元素,如
js
,css
等。
(3)toast
:就是頁面中的一個標簽。
toast
的樣子
比如我在Android虛擬機中打開文件管理器,點擊返回按鈕會有一行提示“再次點擊即可退出。”,
如下圖所示:
這個樣式的提示就叫toast
。toast
並不是彈窗,在頁面中彈窗你不操作的話會一直存在,而toast
默認時間就自動消失了。
補充:
- 我們現在大部分的APP頁面,都是由
native
頁面和webview
頁面混合組成的,既有原生頁面,也有H5頁面。- 在APP中區分原生頁面還是H5頁面的基礎辦法(不一定准確),打開原生頁面是沒有進度條的,打開H5的頁面是有進度條的。
3、Appium簡介
- Appium官網地址:www.Appium.io,由
SauceLab
公司開發。 - Appium是由
nodejs
的express
框架寫的Http Server
,Appium使用WebDriver
的json wire
協議(該協議可支持多語言),來驅動Apple系統的UIAutomation
庫、Android系統的UIAutomator
框架。
Appium對iOS系統的支持得益於Dan Cuellar’s
對於iOS自動化的研究。
Appium也集成了Selendroid
,來支持老Android版本。 - Appium支持Selenium WebDriver支持的所有語言,如
Java
、Object-C
、JavaScript
、Php
、Python
、Ruby
、C#
、Clojure
,或者Perl
語言,更可以使用Selenium WebDriver
的API。Appium支持任何一種測試框架。如果只使用Apple的UIAutomation
,我們只能用JavaScript
來編寫測試用例,而且只能用Instruction
來運行測試用例。同樣,如果只使用Google的UIAutomation
,我們就只能用Java
來編寫測試用例。Appium實現了真正的跨平台自動化測試。 - Appium是一個自動化測試開源、跨平台工具。它允許測試人員在不同的平台(iOS,Android)使用同一套API來寫自動化測試腳本,這樣大大增加了 iOS 和 Android 測試套件間代碼的復用性。
支持iOS平台和Android平台上的原生應用,Web應用和混合應用。
所謂的“移動原生應用”是指那些用iOS或者Android的SDK編寫的應用。
所謂的“移動Web應用”是指使用移動瀏覽器訪問的應用(Appium支持iOS上的Safari
和Android上的Chrome
)。
所謂的“混合應用”是指原生代碼封裝網頁視圖——原生代碼和Web內容交互。
比如,像Phonegap
,可以幫助開發者使用網頁技術開發應用,然后用原生代碼封裝,這些就是混合應用。 - Appium使用的供應商提供的框架:
iOS 9.3
及以上:蘋果的XCUITest
。
iOS 9.3
及更低版本:蘋果的UIAutomation
。
Android 4.2+
:谷歌的UiAutomator/UiAutomator 2
。
Android 2.3+
:谷歌的Instrumentation
(Instrumentation
由單獨的項目Selendroid
提供支持)。
Windows:微軟的WinAppDriver
。
下面這段介紹來自於Appium的官網:
Introduction to Appium
Appium is an open-source tool for automating native, mobile web, and hybrid applications on iOS mobile, Android mobile, and Windows desktop platforms. Native apps are those written using the iOS, Android, or Windows SDKs. Mobile web apps are web apps accessed using a mobile browser (Appium supports Safari on iOS and Chrome or the built-in 'Browser' app on Android). Hybrid apps have a wrapper around a "webview" -- a native control that enables interaction with web content. Projects like Apache Cordova make it easy to build apps using web technologies that are then bundled into a native wrapper, creating a hybrid app.
Importantly, Appium is "cross-platform": it allows you to write tests against multiple platforms (iOS, Android, Windows), using the same API. This enables code reuse between iOS, Android, and Windows testsuites.
Appium簡介
Appium 是一個開源工具,用於在 iOS 移動、Android 移動和 Windows 桌面平台上自動化原生、移動 Web 和混合應用程序。 本機應用是使用 iOS、Android 或 Windows SDK 編寫的應用。 移動網絡應用是使用移動瀏覽器訪問的網絡應用(Appium 支持 iOS 和 Chrome 上的 Safari 或 Android 上的內置“瀏覽器”應用)。 混合應用有一個圍繞“webview”的包裝器——一種支持與網絡內容交互的本機控件。 像 Apache Cordova 這樣的項目可以使用 Web 技術輕松構建應用程序,然后將這些技術捆綁到本機包裝器中,從而創建混合應用程序。
重要的是,Appium 是“跨平台的”:它允許您使用相同的 API 針對多個平台(iOS、Android、Windows)編寫測試。 這可以在 iOS、Android 和 Windows 測試套件之間實現代碼重用。
Appium Philosophy
Appium was designed to meet mobile automation needs according to a philosophy outlined by the following four tenets:
- You shouldn't have to recompile your app or modify it in any way in order to automate it.
- You shouldn't be locked into a specific language or framework to write and run your tests.
- A mobile automation framework shouldn't reinvent the wheel when it comes to automation APIs.
- A mobile automation framework should be open source, in spirit and practice as well as in name!
Appium哲學
Appium是根據以下四個原則概述的理念設計的,以滿足移動自動化需求:
- 您不應該需要重新編譯您的應用程序或以任何方式修改它,以使其自動化。
- 您不應該被鎖在特定的語言或框架中來編寫和運行測試。
- 當涉及到自動化API時,移動自動化框架不應該重新發明輪子。
- 一個移動自動化框架應該是開源的,在精神上和實踐上都是開源的!