Appium
一、簡介
appium是c/s模式的,基於webdriver協議添加對移動設備自動化api擴展而成的,因此具備和webdriver同樣的特性,好比多語言支持,webdriver是基於http協議的,第一鏈接會創建一個session會話,並經過post發送一個json告知服務端相關測試信息.對於Android來講,4.2之後是基於uiautomator框架實現查找注入事件的,4.2之前則是instrumentation框架的,並封裝成,個叫Selendroid這玩意提供服務,客戶端只須要發送http請求實現通信,意味着客戶端就是多語言支持。appium服務端是node.js寫的,因此你安裝的時候不管哪一個平臺都是先裝node。java
二、工做原理
2.1 Android
在Android端,appium基於WebDriver協議,利用Bootstrap.jar,最後經過調⽤用UiAutomator的命令,實現App的自動化測試。UiAutomator測試框架是Android SDK自帶的App UI自動化測試Java庫。另外因爲UiAutomator對H5的支持有限,appium引入了chromedriver以及safaridriver等來實現基於H5的自動化。node
appium 在android端工做流
client端也就是咱們 test script是咱們的webdriver測試腳本。
android
中間是起的Appium的服務,Appium在服務端起了一個Server(4723端口),跟selenium Webdriver測試框架相似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裏提供它提供了一套REST的接口,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操做。ios
appium server會把請求轉發給中間件Bootstrap.jar ,它是用java寫的,安裝在手機上.Bootstrap監聽4724端口並接收appium 的命令,最終經過調⽤用UiAutomator的命令來實現。web
最後Bootstrap將執行的結果返回給appium server。chrome
appium server再將結果返回給 appium client。json
2.2 ios
在IOS端,appium一樣使⽤WebDriver的一套協議。bootstrap
與Android端測試框架不一樣的是,appium ios封裝了apple的 Instruments框架,主要用了Instrument裏的UI Automation(Apple的⾃自動化測試框架),而後在設備中注⼊入bootstrap.js進⾏行監聽。api
appium 在ios端工做流
client端 依然是 test script是咱們的webdriver測試腳本。
session
中間是起的Appium的服務,Appium在服務端起了一個Server(4723端口),跟selenium Webdriver測試框架相似, Appium⽀持標準的WebDriver JSONWireProtocol。在這裏提供它提供了一套REST的接口,Appium Server接收web driver client標準rest請求,解析請求內容,調⽤用對應的框架響應操做。
appium server調用instruments.js 啓動⼀一個socket server,同時分出一個⼦子進程運⾏instruments.app,將bootstrap.js(一個UIAutomation腳本)注⼊入到device⽤於和外界進行交互
最後Bootstrap.js將執行的結果返回給appium server
appium server再將結果返回給 appium client。
因此咱們能夠看到android與ios區別在於appium 將請求轉發到bootstrap.js或者bootstrap.jar.而後由bootstrap 驅動UIAutomation和UiAutomator去devices上完成具體的動做。
三、查看啓動日誌分析
Appium運行原理 appium能夠理解爲一個c/s架構軟件,在pc端安裝的appium server端,經過appium client發送操做命令到app端 ;在啓動時,appium會將bootstrap推送到app上,經過並在app端創建端口爲4724的socket端口,接受來自Appium的 json命令,經過UIautomaticer操控app上的控件。