Appium精要之Appium的背景知識

前言

要想深入地掌握任何一門測試工具腾啥,對工具本身的架構冯吓、原理、使用的協(xié)議及相關知識點都必須要有相關的了解和認識凸舵,才能做到靈活使用失尖。更重要的是,一旦出了問題菇夸,解決問題的時候才會有思路仪吧,大概能夠知道問題出在什么地方,再去針對性地調(diào)試和解決摄咆。所以人断,其實任何工具單純使用都不是很難,你和高手之間就只隔著九個字——“知其然恶迈,且知其所以然”。

好了步做,言歸正傳,在本篇我們來先聊聊關于Appium的原理有關的topic煮剧。那么我們在討論Appium的原理時将鸵,究竟在說些什么呢?其實離不開以下幾點:

△ Appium的架構

△ Appium中非常重要的協(xié)議-JSON wire protocol?

△ Appium的中的session機制?

△ Appium的必要配置(desired capabilities)

△ Appium的Server以及客戶端的相關庫

接下來我們一個一個地介紹草娜。

一痒筒、Appium的架構

Appium的本質(zhì)是什么呢?熟悉Selenium?webdriver的人可以把Appium看作是一個基于移動平臺的webdriver移袍。它跟selenium webdriver一樣老充,也是基于HTTP協(xié)議、并用Node.js封裝的一個移動平臺測試框架,只不過它是專門用于移動平臺的測試而已路狮。它處理HTTP請求的方式與Selenium Webdriver一樣,即由server端接收客戶端發(fā)送過來的遵循JSON協(xié)議的HTTP請求涂籽,并按照實際測試的平臺來調(diào)用平臺自身的測試組件來處理這些請求砸抛,以達到跨平臺測試的效果。

下面我們利用android平臺的處理過程來給大家舉個栗子景东。

在android平臺使用appium來進行測試時奔誓,如果android API是大于或等于17的,則其底層是調(diào)用的Uiautomator測試框架和措,而UIautomator則是android平臺自帶的UI測試框架,所以穩(wěn)定性诬留、兼容性啥的都還不錯贫母。當API低于17時,由于不支持Uiautomator颁独,則是調(diào)用的selendroid測試框架來完成誓酒,具體架構及請求處理過程如下圖所示:

appium 架構圖示

由圖上可以看出來,當我們運行我們所寫好的Appium測試腳本時寨辩,Appium會將相應的測試命令以JSON的形式發(fā)送給Appium server歼冰,而Appium server則會根據(jù)被測平臺android API的版本來調(diào)用不同的測試組件(低于17調(diào)selendroid,大于或等于17調(diào)UIautomator)甸怕。在這里腮恩,還有一個比較重要的角色,即bootstrap.jar秸滴,這個jar包可以理解為放在手機端的一個TCP服務器荡含,它的主要作用是消息的傳遞和測試組件調(diào)度。它以jar包形式存在释液,并與UIautomator或selendroid進行通信误债,確保PC端傳入的命令可以在手機端正確執(zhí)行(后面會有專門的部分來分析這個bootstrap的源碼符衔,從而搞清楚它的運行機制糟袁,在這里大家先了解一下)。

上面是對Appium運行機制的基本介紹形帮,我們再來看看Appium的加載流程:

1.調(diào)用android adb完成基本的系統(tǒng)操作和初始化事件

2.在android上部署bootstrap.jar包并啟動

3. Forward(分發(fā))android的端口到PC機周叮,方便測試命令的傳輸

4. PC端監(jiān)聽端口接收請求,并使用JSON wire protocol協(xié)議來解析

5.把解析好的命令通過forward的端口發(fā)給bootstrap.jar

6.由bootstrap.jar最終在手機端調(diào)用Uiautomator或selendroid完成實際的具體測試操作

二合冀、關于JSON wire?protocol

JSON wire protocol(又名基于JSON的有線傳輸協(xié)議)项贺,它是由webdriver開發(fā)者發(fā)明的一種傳輸協(xié)議,現(xiàn)在基本已經(jīng)成為一個標準的W3C標準了棕叫。Appium的核心就是一個遵守REST設計風格的web服務器奕删,它接受客戶端的連接,接收客戶端的命令伏钠,在手機設備上執(zhí)行命令谨设,然后通過HTTP的響應收集命令執(zhí)行的結果。這種架構給我們提供了很好的開放特性:只要某種語言有http客戶端的api,我們就可以通過這個語言寫我們的測試代碼华畏。最初webdriver以及它所依賴的JSON WP的目標是通過調(diào)用Firefox driver亡笑、IE driver等調(diào)用瀏覽器的內(nèi)核相關API,完成web頁面的測試百拓。

Appium在傳統(tǒng)的JSON WP的基礎上,實現(xiàn)了移動端的Mobile JSON WP衙传,它是selenium JSON WP的擴展,也主要面向移動端做了大量的優(yōu)化地回,除了常規(guī)的app中的元素識別俊鱼、對象操作外并闲,還包括安裝、卸載app等帝火,都可以做到购公,這是其他常見的移動測試工具所不具備的能力。

下面我們列舉一些在Appium中使用的宏浩,且基于標準RESTful API的接口例子:

/session/:sessionId

/session/:sessionId/element

/session/:/sessionId/elements

……

當然還有很多其他的接口比庄,Appium提供的客戶端庫則具備調(diào)用這些REST API的能力。比如AppiumDriver.getPageSourece();當你在appium中調(diào)用這個方法的時候佳窑,appium會發(fā)出一個HTTP請求到Appiumserver神凑,調(diào)用具有相應方法的API的端點(endpoint),這個API會調(diào)用像下面這個RESTful API接口來進行處理:

/session/:sessionId/source

PC端的客戶端組件會通過測試腳本向Appium?Server發(fā)送一個JSON格式的請求鹃唯,Appium server通過調(diào)用上面這個API接口地址來獲得頁面源碼瓣喊。當被測應用是個基于web網(wǎng)頁的應用時,它會將頁面的源碼以字符串格式進行返回洪橘。而如果當被測應用是個原生app時,Appium server將會最終以XML文件格式返回被測應用的UI層級視圖熄求。具體的返回響應文本格式根據(jù)被測平臺和應用也有很大的區(qū)別抡四。

三、Appium會話

每一次當Appium server成功啟動后淑履,客戶端的測試庫(client library)會要求與Server創(chuàng)建一個會話(session)藻雪。會話的作用是為了確保能區(qū)別不同的客戶端請求與不同的被測應用,每個特定的會話都有一個特定的sessionId參數(shù)指煎。每次測試開始時便斥,客戶端將初始化一個session會話,雖然不同的語言初始化的方式不同像街,但是他們都要發(fā)送POST/session請求到服務器端晋渺,這些請求里面都會帶有一個對象:desired capabilities ,這個時候服務器端會啟動自動化session然后返回一個session ID,以后的命令都會用這個seesion ID去匹配畴栖。

四八千、關于desired capabilities

desired capabilities是一個JSON對象,由一系列的鍵值對組成照皆,里面包含了各種各樣的信息鸠信。發(fā)送到服務器端后论寨,server解析這些信息就知道了客戶端對哪種session感興趣,然后就會啟動相應的session绰垂。這里面的信息會影響著服務器端啟動session的類型。比如你platformName的值為ios,就是告訴服務器啟動一個ios的session胧沫,而不是android seesion占业。如果safariAllowPopups的值為true,這是告訴safari類的自動化session谦疾,可以使用js打開新窗口。具體信息查看capabilities doc詳細了解念恍,后面我們用一篇來介紹常見desired capabilities的作用峰伙。

五、Appium的Server以及客戶端的相關庫

Appium server是PC端與不同的移動端系統(tǒng)(ios策彤,android)進行交互的主要服務器顿膨,之前所說的每個客戶端在建立測試時所需要的session會話就是由server建立的。它的本質(zhì)是一個HTTP服務器必搞,由node.js編寫而成囊咏,并使用了跟selenium server相同的一些理念(如基于REST風格的API設計、JSON WP)霜第。它負責識別來自客戶端的HTTP請求并將這些請求發(fā)送給不同的平臺户辞。我們可以通過下載源碼進行編譯或直接通過NPM進行安裝的方式來運行Appium server,同時也可以安裝并運行它的GUI版本刃榨。appium server的官方下載網(wǎng)址是http://appium.io。

Appium另一個非常大的優(yōu)勢是由于它的核心庫API是基于REST規(guī)范開發(fā)的桌吃,所以無論什么語言苞轿,只要其支持發(fā)送HTTP請求,都可以用來編寫測試代碼并與之進行交互瑟俭,減少了大家學習某種特定語言的成本契邀。目前使用比較廣泛的語言包括Java、python椭迎、C#田盈、ruby等。并且Appium擴展了傳統(tǒng)的基于web的webdriver的客戶端測試庫简软,并專門針對移動設備測試提供了特定的測試命令接口述暂,例如移動設備上多點觸摸畦韭、手勢操作等,正是由于其做了這些專門的擴展察郁,所以我們在使用appium來做移動端的自動化測試的時候转唉,需要下載其專用的客戶端測試庫來代替?zhèn)鹘y(tǒng)的web driver所使用的測試庫。

主要參考資料:由PACKT出版的《Appium Essential》一書麦轰,但部分內(nèi)容根據(jù)實際情況本文作者有增刪。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驯嘱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子壕鹉,更是在濱河造成了極大的恐慌聋涨,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脊凰,死亡現(xiàn)場離奇詭異茂腥,居然都是意外死亡最岗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門懒豹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脸秽,“玉大人蝴乔,你說我怎么就攤上這事“郏” “怎么了铝穷?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晦炊。 經(jīng)常有香客問我,道長贤姆,這世上最難降的妖魔是什么稳衬? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任薄疚,我火速辦了婚禮街夭,結果婚禮上,老公的妹妹穿的比我還像新娘板丽。我一直安慰自己埃碱,他們只是感情好猖辫,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砚殿,像睡著了一般住册。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓮具,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天荧飞,我揣著相機與錄音,去河邊找鬼名党。 笑死叹阔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的传睹。 我是一名探鬼主播耳幢,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼欧啤,長吁一口氣:“原來是場噩夢啊……” “哼睛藻!你這毒婦竟也來了?” 一聲冷哼從身側響起邢隧,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤店印,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倒慧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體按摘,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡包券,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了炫贤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溅固。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兰珍,靈堂內(nèi)的尸體忽然破棺而出侍郭,到底是詐尸還是另有隱情,我是刑警寧澤掠河,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布亮元,位于F島的核電站,受9級特大地震影響口柳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜有滑,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一跃闹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毛好,春花似錦望艺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吼驶,卻和暖如春惩激,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟹演。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工风钻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酒请。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓骡技,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羞反。 傳聞我的和親對象是個殘疾皇子布朦,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容