一、Appium加載的過程圖解
Appium的原理
WebDriver script:我們的測試腳本(java or python)
Appium:
會首先開啟一個監聽4723端口的server,接收測試腳本發送過來的對應請求,再将對應的請求發送給中間件Bootstrap.jar(注意這裡的請求不是整個腳本檔案,而是對應的指令請求,比如:點選一個元素就是一條請求)
Bootstrap.jar:
監聽4724端口由appium發送過來的相關請求,并且将請求轉換成UiAutomator可以識别的指令發給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測試腳本,該腳本的唯一一個測試方法所做的事情是在手機端開啟一個SocketServer(通信子產品),用來監聽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這個位址就可以