Appium原理
面試的時候,被問到appium原理,一點不會,實在尷尬。
大家可以直接翻看原作https://blog.csdn.net/jffhy2017/article/details/69220719
appium運行時安裝的2個應用:Appium Settings和Unlock。
一、appium加載的過程圖解:
appium的加載過程
- 1.調用Android adb完成基本的系統操作
- 2.向Android上部署bootstrap.jar
- 3.bootstrap.jar Forward Android的端口到PC機器上
- 4.PC上監聽端口接收請求,使用webdriver協議
- 5.分析命令并通過forward 端口發給bootstrap.jar
- 6.bootstrap.jar接收請求并把命令發給uiautomator
- 7.ui automator執行命令
二、初步認識appium工作過程
- 1.appium有C/S模式
- 2.appium是基于webdriver協議對移動設備自動化api擴展而成的,所有具有和webdriver一樣的特性,比如多語言支持。
- 3.webdriver是基于http協議的,第一連接會建立一個session會話,并通過post發送一個json告知服務端相關測試信息。
- 4.對于Android來說,4.2以后是基于UiAutomator框架實現查找注入事件的,4.2以前則是instrumentation框架的,并封裝成一個叫Selendroid提供服務。
- 5.客戶端只需要發送http請求實現通訊,意味著客戶端就是多語言支持的。
- 6.appium服務端是node.js寫的,所以安裝那個平臺都是先安裝node,然后npm install -g appium(需要FQ)。
三、bootstrap
1.bootstrap的作用
bootstrap是Appium運行在安卓測試機傻姑娘的一個UIAutomator測試腳本,該腳本的唯一功能就是在目標機器開啟一個socket服務器來把一個session中Appium從PC端過來的命令發送給UiAutoamtor來執行處理。
它會監聽4724端口獲得命令,然后交給UiAutomator來處理。
2.bootstrap
首先,bootstrap是uiautomator的測試腳本,它的入口類bootstrap繼承于UiautomatorTestCase,所以Uiautomator可以正常運行它,它也可以正常使用uiautomator的方法,這是就是appium的命令可以轉換成uiautomator的關鍵;
其次,,bootstrap是一個socket服務器,專門監聽4724端口過來的appium的連接和命令數據,并把appium的命令轉換成uiautomator的命令來讓uiautomator進行處理;
最后,bootstrap處理的是從PC端傳過來的命令,而非一個文件。
四、所使用的技術
Android上使用了instrumentation和uiautomator兩套技術
ios使用uiautomation
同時支持Firefox,并可擴展其他平臺。
默認開啟4723端口接收webdriver請求可,4723是appium服務,專門和腳本打交道;
默認開啟4724,用于和Android設備通訊
新版本的appium Android增加了UIautoamator2的支持,iOS換成了XCUItest
五、capabilities
capabilities是一些鍵值對的集合。客戶端將鍵值對發送給appium服務端,用來告訴服務端怎樣開始測試。
六、工作原理
Appium啟動時會創建一個http://127.0.0.1:4723/wd/hub服務端(相當于一個中轉站),腳本會告訴服務器我要做什么,服務端再去跟設備打交道。
服務端和設備默認使用4724端口進行通信的,底層調用uiautoamator工具,在測試的時候服務端給設備扔一個bootstrap.jar,會啟動這個包,啟動之后會在手機上創建一個socket服務,暴露的就是4723端口;相對socket服務來說,appium服務端又是一個客戶端;
服務端收到腳本傳遞過來的命令之后,通過電腦上的4724端口,向設備的4724端口發送指令,bootstrap.jar收到指令后會去完成點擊,滑動等操作,完成之后再給服務端一個響應。服務端收到之后再去運行腳本。