一、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)Uiautomator執行命令
二、初步認識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安裝(翻牆牆)
三、bootstrap介紹
1)Bootstrap作用:
Bootstrap是Appium運行在安卓目標測試機器上的一個UiAutomator測試腳本,該腳本的唯一一個所做的事情是在目標機器開啟一個socket服務器來把一個session中Appium從PC端過來的命令發送給UiAutomator來執行處理。
它會監聽4724端口獲得命令然后pass給UiAutomator來做處理。
2)Bootstrap在appium中扮演的角色:
首先,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設備通訊
五、Capabilities
Capabilities是由客戶端發送給Appium服務器端的用來告訴服務器去啟動哪種我們想要的會話的一套鍵值對集合。當中也有一些鍵值對是用來在自動化的過程中修改服務器端的行為方式。
六、自我理解的工作原理
Appium啟動時會創建一個http:127.0.0.1:4723/wd/hub服務端(相當於一個中轉站),腳本會告訴服務器我要做什么,服務端再去跟設備打交道,服務端完成了腳本交給他的任務之后
服務端和設備如何通訊?
服務端和設備默認使用4724端口進行通訊的,底層調用uiautomator工具,在測試的時候服務端會給設備扔一個jar包就是appiumbootstrap.jar,會啟動這個包,啟動之后會在手機上創建一個socket服務,暴露的就是4724的端口;相對於socket服務來說,appium服務端又是一個客戶端;
服務端的4724可以修改,設備上的不可以;服務端收到腳本傳遞過來的命令之后,通過電腦上的4724端口,想設備上的4724端口發送指令,appiumbootstrap.jar收到指令后回去完成點擊,滑動其他的操作,完成之后再通過服務給服務端一個相應。服務端收到之后再去相應腳本
服務端和腳本如何通訊?
通過接口來訪問,意味着服務端和腳本可以不在一起,只要能訪問到127.0.0.1:4723這個地址就可以