Appium框架解析

1. Appium框架概況

Appium是一個(gè)開(kāi)源的、跨平臺(tái)的自動(dòng)化測(cè)試框架,該框架適用于Native Application、Mobile Web Application或Hybrid Application的自動(dòng)化測(cè)試。Native Application指的是基于智能手機(jī)本地操作系統(tǒng)如iOS和Android并使用原生編程語(yǔ)言(如Android上使用Java)編寫并運(yùn)行的第三方應(yīng)用程序。Mobile Web Application指的是基于Web的系統(tǒng)和應(yīng)用。Hybrid Application指的是在手機(jī)原生應(yīng)用程序中嵌入了Webview,通過(guò)Webview可以訪問(wèn)網(wǎng)頁(yè)的內(nèi)容。

2. Appium架構(gòu)原理

Appium架構(gòu)原理

Appium是在手機(jī)操作系統(tǒng)自帶的測(cè)試框架基礎(chǔ)上實(shí)現(xiàn)的,Android和iOS的系統(tǒng)上使用的工具分別如下:

Android(版本>4.2):UIAutomator, Android 4.2之后系統(tǒng)自帶的UI自動(dòng)化測(cè)試工具。

Android(版本≤4.2):Selendroid,基于Android Instrumentation框架實(shí)現(xiàn)的自動(dòng)化測(cè)試工具。

iOS:UIAutomation, iOS系統(tǒng)自帶的UI自動(dòng)化測(cè)試工具。

Appium的架構(gòu)原理如圖所示,由客戶端(Appium Client)和服務(wù)器(Appium Server)兩部分組成,客戶端與服務(wù)器端通過(guò)JSON Wire Protocol進(jìn)行通信。

1)Appium服務(wù)器:Appium服務(wù)器是Appium框架的核心。它是一個(gè)基于Node.js實(shí)現(xiàn)的HTTP服務(wù)器。Appium服務(wù)器的主要功能是接受從Appium客戶端發(fā)起的連接,監(jiān)聽(tīng)從客戶端發(fā)送來(lái)的命令,將命令發(fā)送給bootstrap.jar(iOS手機(jī)為bootstrap.js)執(zhí)行,并將命令的執(zhí)行結(jié)果通過(guò)HTTP應(yīng)答反饋給Appium客戶端。

(2)Bootstrap.jar:Bootstrap.jar是在Android手機(jī)上運(yùn)行的一個(gè)應(yīng)用程序,它在手機(jī)上扮演TCP服務(wù)器的角色。當(dāng)Appium服務(wù)器需要運(yùn)行命令時(shí),Appium服務(wù)器會(huì)與Bootstrap. jar建立TCP通信,并把命令發(fā)送給Bootstrap.jar; Bootstrap.jar負(fù)責(zé)運(yùn)行測(cè)試命令。

(3)Appium客戶端:它主要是指實(shí)現(xiàn)了Appium功能的WebDriver協(xié)議的客戶端Library,它負(fù)責(zé)與Appium服務(wù)器建立連接,并將測(cè)試腳本的指令發(fā)送到Appium服務(wù)器?,F(xiàn)有的客戶端Library有多種語(yǔ)言的實(shí)現(xiàn),包括Ruby、Python、Java、JavaScript(Node. js)、Object C、PHP和C#。Appium的測(cè)試是在這些Library的基礎(chǔ)上進(jìn)行開(kāi)發(fā)的。

(4)Session:Appium的客戶端和服務(wù)端之間進(jìn)行通信都必須在一個(gè)Session的上下文中進(jìn)行??蛻舳嗽诎l(fā)起通信的時(shí)候首先會(huì)發(fā)送一個(gè)叫作“Desired Capabilities”的JSON對(duì)象給服務(wù)器。服務(wù)器收到該數(shù)據(jù)后,會(huì)創(chuàng)建一個(gè)session并將session的ID返回到客戶端。之后客戶端可以用該session的ID發(fā)送后續(xù)的命令。

(5)Desired Capabilities:Desired Capabilities是一組設(shè)置的鍵值對(duì)的集合,其中鍵對(duì)應(yīng)設(shè)置的名稱,而值對(duì)應(yīng)設(shè)置的值。Desired Capabilities主要用于通知Appium服務(wù)器建立需要的Session,其中一些設(shè)置可以在Appium運(yùn)行過(guò)程中改變Appium服務(wù)器的運(yùn)行行為。

Appium在Android上基于UIAutomator實(shí)現(xiàn)了測(cè)試的代理程序(Bootstrap.jar),在iOS上基于UIAutomation實(shí)現(xiàn)了測(cè)試的代理程序(Bootstrap.js)。當(dāng)測(cè)試腳本運(yùn)行時(shí),每行WebDriver的腳本都將轉(zhuǎn)換成Appium的指令發(fā)送給Appium服務(wù)器,而Appium服務(wù)器將測(cè)試指令交給代理程序,將由代理程序負(fù)責(zé)執(zhí)行測(cè)試。比如腳本上的一個(gè)點(diǎn)擊操作,在Appium服務(wù)器上都是touch指令,當(dāng)指令發(fā)送到Android系統(tǒng)上時(shí),Android系統(tǒng)上的Bootstrap.jar將調(diào)用UIAutomator的方法實(shí)現(xiàn)點(diǎn)擊操作;而當(dāng)指令發(fā)送到iOS系統(tǒng)上時(shí),iOS的Bootstrap.js將調(diào)用UIAutomation的方法實(shí)現(xiàn)點(diǎn)擊操作。由于Appium有了這樣的能力,同樣的測(cè)試腳本可以實(shí)現(xiàn)跨平臺(tái)運(yùn)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,036評(píng)論 25 709
  • 前言 要想深入地掌握任何一門測(cè)試工具,對(duì)工具本身的架構(gòu)、原理、使用的協(xié)議及相關(guān)知識(shí)點(diǎn)都必須要有相關(guān)的了解和認(rèn)識(shí),才...
    0xAI閱讀 4,936評(píng)論 3 55
  • 前言:本篇文章并非我的原創(chuàng),而是翻譯自英文原著。這里的每一句話我都仔細(xì)揣摩過(guò)并且加以實(shí)踐,著實(shí)花了一些時(shí)間,在此記...
    顧顧314閱讀 22,301評(píng)論 0 19
  • 我原來(lái)一直認(rèn)為學(xué)的越多越好,看到越多越好,了解更多的越約好?把所有的東西統(tǒng)統(tǒng)都裝進(jìn)腦子里面,不管自己消化吸收了多少...
    小二燙壺酒閱讀 317評(píng)論 2 1

友情鏈接更多精彩內(nèi)容