Appium原理精講
目前使用Appium新版本和舊版本的企業(yè)數(shù)目都很多,而兩個版本的安裝過程和api的使用又有較大的區(qū)別。但是無論表面上的東東如何變化,內(nèi)部原理都是一樣的。在這里我給大家介紹一下appium的核心,增進大家對它的理解,相信這會對大家后期的使用有很大的幫助。
Appium概念
Appium是一個開源、跨平臺的自動化測試工具,用于測試原生和輕量移動應(yīng)用,支持 iOS, Android 和 FirefoxOS 平臺。Appium
驅(qū)動蘋果的 UIAutomation 庫和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 協(xié)議。Appinm 的 iOS 支持是基于 Dan Cuellar's 的 iOS Auto. Appium 同時綁定了Selendroid 用于老的 Android 平臺測試(SDK < 16)。
官網(wǎng):http://appium.io/
Github:https://github.com/appium/appium
特性
1. 跨平臺, native/ hybrid/ webview(H5)
2. 跨設(shè)備, android/iOS
3. 跨app,可以在多個app之間交互
4. 不依賴APP開源代碼
5. 支持Selenium WebDriver / Selenium Grid
6. 跨語言, java/python/ruby
7. Open Source
框架介紹
Appium是由nodejs的express框架寫的HttpServer。Appium不是它??創(chuàng)建?套新的測試框架,是將現(xiàn)有的優(yōu)秀的框架進行了集成,以Selenium
WebDriver的協(xié)議(JsonWireProtocol/Restful web service)統(tǒng)?起來.使得這個框架滿?多??的需求。Appium啟動自動化測試后,在被測設(shè)備上啟動?個server,監(jiān)聽來? Appium server的指令。不同的平臺(如IOS,Android)采?不同的運?和交換?式。Appium將某個樁程序“侵入”平臺,用于接受指令,來完成測試腳本的運行。在Android端,appium基于WebDriver,并利用Bootstrap.js,最后通過調(diào)?用UiAutomator的命令,實現(xiàn)App的自動化測試。另外由于UiAutomator對H5的支持有限,appium引入了chromedriver來實現(xiàn)基于H5的自動化。
原理圖(Android)
分析:
1.左邊的Code(WebDriver script)是我們的appium測試腳本。
2.中間是開起的Appium的服務(wù)(不同的系統(tǒng)需要安裝與之對應(yīng)的Appium server,這也就是appium可以同時支持android、ios以及windows應(yīng)用進行自動化測試的原因。在這里以android為例進行說明)Appium在這邊起了一個Server(4723端口),跟selenium Webdriver測試框架類似,Appium支持標(biāo)準(zhǔn)的WebDriver JSONWireProtocol。在這里提供了一套web服務(wù),Appium Server接收webdriver標(biāo)準(zhǔn)請求,解析請求內(nèi)容,調(diào)?用對應(yīng)的框架響應(yīng)操作。如:腳本發(fā)送一個點擊按鈕的請求給appium server。
3. appium server會把請求轉(zhuǎn)發(fā)給中間件Bootstrap.jar ,它是用java寫的,安裝在手機上。Bootstrap接收 appium 的命令(4724端口),最終通過調(diào)?用UiAutomator的命令來實現(xiàn)。
4.最后執(zhí)? 的結(jié)果由Bootstrap返回給appium server。
5.另外,appium還用到了chromedriver來支持基于H5(webview)的測試。