Appium1.6.4 +JAVA+TestNg+Mac教程


Appium和它的設(shè)計(jì)思想


什么是Appium?

1枢贿、appium是開源的移動(dòng)端自動(dòng)化測試框架嘁圈;

2省骂、appium可以測試原生的、混合的最住、以及移動(dòng)端的web項(xiàng)目;

3怠惶、appium可以測試ios涨缚,android應(yīng)用(當(dāng)然了,還有firefoxos);

4脓魏、appium是跨平臺的兰吟,可以用在osx,windows以及l(fā)inux桌面系統(tǒng)上茂翔;

Appium的設(shè)計(jì)哲學(xué)

1混蔼、不需要為了自動(dòng)化而且重新編譯或修改測試app;

2珊燎、不應(yīng)該讓移動(dòng)端自動(dòng)化測試限定在某種語言和某個(gè)具體的框架惭嚣;也就是說任何人都可以使用自己最熟悉最順手的語言以及框架來做移動(dòng)端自動(dòng)化測試;

3悔政、不要為了移動(dòng)端的自動(dòng)化測試而重新發(fā)明輪子晚吞,重新寫一套驚天動(dòng)地的api;也就是說webdriver協(xié)議里的api已經(jīng)夠好了谋国,拿來改進(jìn)一下就可以了槽地;

4、移動(dòng)端自動(dòng)化測試應(yīng)該是開源的芦瘾;

Appium的設(shè)計(jì)思想

1捌蚊、為了能夠?qū)崿F(xiàn)哲學(xué)里描述的第2條,也就是不應(yīng)該讓移動(dòng)端自動(dòng)化測試限定在某種語言和某個(gè)具體的框架近弟;也就是說任何人都可以使用自己最熟悉最順手的語言以及框架來做移動(dòng)端自動(dòng)化測試逢勾;appium選擇了client-server的設(shè)計(jì)模式。只要client能夠發(fā)送http請求給server藐吮,那么的話client用什么語言來實(shí)現(xiàn)都是可以的溺拱,這就是appium及webdriver如何做到支持多語言的;

2谣辞、為了能夠?qū)崿F(xiàn)不要為了移動(dòng)端的自動(dòng)化測試而重新發(fā)明輪子迫摔,重新寫一套驚天動(dòng)地的api;也就是說webdriver協(xié)議里的api已經(jīng)夠好了泥从,拿來改進(jìn)一下就可以了句占;這個(gè)思想,appium擴(kuò)展了webdriver的協(xié)議躯嫉,沒有自己重新去實(shí)現(xiàn)一套纱烘。這樣的好處是以前的webdriverapi能夠直接被繼承過來,以前的webdriver各種語言的binding都可以拿來就用祈餐,省去了為每種語言開發(fā)一個(gè)client的工作量擂啥;

3、appium是開源的帆阳,這也實(shí)現(xiàn)了哲學(xué)思想里的最后一點(diǎn)

Appium的基本概念


C/S架構(gòu)

appium的核心其實(shí)是一個(gè)暴露了一系列REST API的server哺壶。

這個(gè)server的功能其實(shí)很簡單:監(jiān)聽一個(gè)端口,然后接收由client發(fā)送來的command。翻譯這些command山宾,把這些command轉(zhuǎn)成移動(dòng)設(shè)備可以理解的形式發(fā)送給移動(dòng)設(shè)備至扰,然后移動(dòng)設(shè)備執(zhí)行完這些command后把執(zhí)行結(jié)果返回給appiumserver,appiumserver再把執(zhí)行結(jié)果返回給client资锰。

在這里client其實(shí)就是發(fā)起command的設(shè)備敢课,一般來說就是我們代碼執(zhí)行的機(jī)器,執(zhí)行appium測試代碼的機(jī)器绷杜。狹義點(diǎn)理解直秆,可以把client理解成是代碼,這些代碼可以是java/ruby/python/js的接剩,只要它實(shí)現(xiàn)了webdriver標(biāo)準(zhǔn)協(xié)議就可以切厘。

這樣的設(shè)計(jì)思想帶來了一些好處:

可以帶來多語言的支持;

可以把server放在任意機(jī)器上懊缺,哪怕是云服務(wù)器都可以疫稿;(是的,appium和webdriver天生適合云測試)


C/S架構(gòu)

Session

session就是一個(gè)會(huì)話鹃两,在webdriver/appium遗座,你的所有工作永遠(yuǎn)都是在session start后才可以進(jìn)行的。一般來說俊扳,通過POST /session這個(gè)URL途蒋,然后傳入Desired Capabilities就可以開啟session了。

開啟session后馋记,會(huì)返回一個(gè)全局唯一的session id号坡,以后幾乎所有的請求都必須帶上這個(gè)session id,因?yàn)檫@個(gè)seesionid代表了你所打開的瀏覽器或者是移動(dòng)設(shè)備的模擬器梯醒。

進(jìn)一步思考一下宽堆,由于session id是全局唯一,那么在同一臺機(jī)器上啟動(dòng)多個(gè)session就變成了可能茸习,這也就是selenium gird所依賴的具體理論根據(jù)畜隶。

session就是一個(gè)會(huì)話,在webdriver/appium号胚,你的所有工作永遠(yuǎn)都是在session start后才可以進(jìn)行的籽慢。一般來說,通過POST /session這個(gè)URL猫胁,然后傳入Desired Capabilities就可以開啟session了箱亿。

開啟session后,會(huì)返回一個(gè)全局唯一的session id杜漠,以后幾乎所有的請求都必須帶上這個(gè)session id极景,因?yàn)檫@個(gè)seesionid代表了你所打開的瀏覽器或者是移動(dòng)設(shè)備的模擬器察净。

進(jìn)一步思考一下驾茴,由于session id是全局唯一盼樟,那么在同一臺機(jī)器上啟動(dòng)多個(gè)session就變成了可能,這也就是selenium gird所依賴的具體理論根據(jù)锈至。

Desired Capabilities

Desired Capabilities攜帶了一些配置信息晨缴。從本質(zhì)上講,這個(gè)東東是key-value形式的對象峡捡。你可以理解成是java里的map击碗,python里的字典,ruby里的hash以及js里的json對象们拙。實(shí)際上Desired Capabilities在傳輸時(shí)就是json對象稍途。

Desired Capabilities最重要的作用是告訴server本次測試的上下文。這次是要進(jìn)行瀏覽器測試還是移動(dòng)端測試砚婆?如果是移動(dòng)端測試的話是測試android還是ios械拍,如果測試android的話那么我們要測試哪個(gè)app?server的這些疑問Desired Capabilities都必須給予解答装盯,否則server不買賬坷虑,自然就無法完成移動(dòng)app或者是瀏覽器的啟動(dòng)。

automationName:使用哪種自動(dòng)化引擎埂奈。appium(默認(rèn))還是Selendroid迄损?

platformName:使用哪種移動(dòng)平臺。iOS,?Android,orFirefoxOS账磺?

deviceName:啟動(dòng)哪種設(shè)備芹敌,是真機(jī)還是模擬器?iPhone

Simulator,?iPad Simulator,?iPhone Retina 4-inch,?Android Emulator,?Galaxy S4, etc...

app:應(yīng)用的絕對路徑垮抗,注意一定是絕對路徑氏捞。如果指定了appPackage和appActivity的話,這個(gè)屬性是可以不設(shè)置的借宵。另外這個(gè)屬性和browserName屬性是沖突的幌衣。

browserName:移動(dòng)瀏覽器的名稱。比如Safari' for

iOS and 'Chrome', 'Chromium', or 'Browser' for Android壤玫;與app屬性互斥豁护。

udid:物理機(jī)的id。比如1ae203187fc012g欲间。

Appium的環(huán)境搭建


Appium支持Windows和Mac端楚里,如果你在Windows上安裝appium,你沒法使用預(yù)編譯專用于OS X的.app文件猎贴,你也將不能測試IOS apps班缎,因?yàn)閍ppium依賴OS X專用的庫(IOSSDK)來支持IOS測試蝴光。這意味著你只能通過在mac上來運(yùn)行IOS的app測試。所有的測試工具都是這樣达址,只有在MAC平臺上才可以測試IOS設(shè)備蔑祟。所以我們采用AppiumforMAC來為大家說明Appium的環(huán)境搭建、測試腳本及使用方法沉唠。Appium在mac上環(huán)境搭建有2種方式疆虚,一種是命令方式,一種是直接安裝dmgGUI版本方式搭建環(huán)境满葛。

命令形式搭建Appium環(huán)境

1径簿、java需要JDK8

localhost:~ghl$ java -version

java version

"1.8.0_92"

Java(TM) SERuntimeEnvironment(build1.8.0_92-b14)

JavaHotSpot(TM) 64-Bit

Server VM (build25.92-b14, mixed mode)

2、git

localhost:~ghl$git--version

gitversion 2.9.3 (Apple Git-75)

3嘀韧、ruby

localhost:~ghl$ ruby -v

ruby2.0.0p648 (2015-12-16revision53162)[universal.x86_64-darwin16]

4篇亭、brew

localhost:~ghl$ brew -v

Homebrew1.1.11

Homebrew/homebrew-core(gitrevision726e;lastcommit2017-03-16)

5、node

brew install node

6锄贷、npm

localhost:~ghl$npm-v

4.1.2

7默勾、Appium和Appium-doctor的安裝

npm install –g appium

npm install appium-doctor -g

8像云、webdriver

npm install wd

9麦乞、Xcode和AndroidStduio的安裝

以上所有安裝完成之后茁帽,執(zhí)行appium-doctor檢測Appium環(huán)境是否搭建成功,如果成功因惭,則如下圖所示岳锁。

Appium命令環(huán)境


Appium GUI版本安裝

鏈接: https://pan.baidu.com/s/1skDxXLj? 密碼: e3f7

需要注意的地方,JDK版本一定要8蹦魔,Xcode版本8.2以上激率。


Appium桌面版

Appium client的安裝

appiumclient是對webdriver原生api的一些擴(kuò)展和封裝。它可以幫助我們更容易的寫出用例勿决,寫出更好懂的用例乒躺。

appiumclient是配合原生的webdriver來使用的,因此二者必須配合使用缺一不可低缩。

Appium client有很多種嘉冒,有java-client、php-client咆繁、python-client讳推、node-adb-client、perl-client玩般、ruby-lib

Java-Client的安裝

使用IEDA新建maven工程

為工程添加如下依賴

Java-Client依賴

移動(dòng)端的安裝

Android的虛擬機(jī)可以使用Genymotion也可以使用真機(jī)測試银觅。


Android虛擬機(jī)

IOS端可以使用Xcdoe自帶的虛擬機(jī),也可以使用真機(jī)測試坏为。

Appium Java-Client實(shí)例


AppiumServer端啟動(dòng)

命令行形式啟動(dòng)

localhost:~ghl$appium-a 127.0.0.1 -p4723

[Appium]WelcometoAppiumv1.6.4

[Appium] Non-default server args:

[Appium]address: 127.0.0.1

[Appium]Appium REST http interface listener started on 127.0.0.1:4723

也可以通過桌面版啟動(dòng)


設(shè)置服務(wù)器地址


Appium日志界面

Java測試腳本簡單示例

在工程內(nèi)添加依賴


TestNg依賴

在test目錄下構(gòu)建層級目錄究驴,以Android為例新建測試類


層級目錄

測試腳本的書寫


Java測試腳本

運(yùn)行測試腳本

首先啟動(dòng)對應(yīng)的模擬器或者連接對應(yīng)的真機(jī)設(shè)備

可以直接對單個(gè)腳本測試镊绪,也可以使用maven插件命令同時(shí)對多個(gè)腳本進(jìn)行測試。

如果使用maven插件加入以下插件依賴:

maven編譯插件


關(guān)于控件定位


Android的控件定位

進(jìn)入SDK/Tools目錄洒忧,找到uiautomatorviewer鼠標(biāo)拖到終端里蝴韭,回車顯示如下界面。點(diǎn)擊框選按鈕跑慕,找到你要找的控件万皿,得到Resourceid.


Android控件定位

獲取到控件ID之后就可以精確定位到控件從而模擬用戶操作摧找。


IOS的控件定位

打開終端使用npm install app-inspector -g安裝app-inspector

如果安裝app-inspector緩慢或者失敗核行,切換國內(nèi)淘寶鏡像,前面環(huán)境安裝的也類似npm config set registry https://registry.npm.taobao.org

使用命令npm install macaca-cli -g安裝macaca蹬耘,然后運(yùn)行macaca doctor檢測環(huán)境是否正常芝雪。


若不正常,哪項(xiàng)顯示為紅色相應(yīng)的解決综苔,可以網(wǎng)上找一下資料惩系,如我的IOS環(huán)境有2項(xiàng)異常,分別用brew install ios-webkit-debug-proxy和brew install usbmuxd修復(fù)如筛,再次運(yùn)行macaca doctor,IOS環(huán)境正常堡牡。


終端運(yùn)行instruments –s查看當(dāng)前所有可用設(shè)備,得到相應(yīng)設(shè)備UUID

終端運(yùn)行app-insepctor –u 設(shè)備UUID即可啟動(dòng)inspector杨刨,會(huì)從瀏覽器打開一個(gè)網(wǎng)頁晤柄,如下圖所示。注意點(diǎn):XcodeSwift版本要大于等于3.1妖胀,否則會(huì)出現(xiàn)異常無法啟動(dòng)芥颈。使用xcrun swift–version命令查看當(dāng)前Swift版本。


app-inspector界面

獲取到控件ID之后就可以精確定位到控件從而模擬用戶操作赚抡。


關(guān)于WebView頁面元素的定位

Android的WebView頁面類的元素用原有的方法是定位不到的爬坑,需要在定位之前加入以下代碼:

然后在瀏覽器中打開網(wǎng)頁對應(yīng)地址,通過開發(fā)者工具定位元素的id或者class涂臣,通過頁面元素標(biāo)簽里的這2個(gè)屬性定位WebView頁面元素盾计。如果不知道網(wǎng)頁地址,可以使用Chrome瀏覽器赁遗,手機(jī)連接電腦或者開啟模擬器署辉,輸入chrome://inspect/#devices。就會(huì)顯示模擬器或者真機(jī)設(shè)備上WebView的地址吼和。

IOS的WebView元素定位方法還是使用app-inspector工具來進(jìn)行定位涨薪。可以準(zhǔn)確獲取每個(gè)頁面的元素的Xpath炫乓。




作者:郭翰林

聯(lián)系方式:QQ群:264587303

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刚夺,一起剝皮案震驚了整個(gè)濱河市献丑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侠姑,老刑警劉巖创橄,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莽红,居然都是意外死亡妥畏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門安吁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醉蚁,“玉大人,你說我怎么就攤上這事鬼店⊥鳎” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵妇智,是天一觀的道長滥玷。 經(jīng)常有香客問我,道長巍棱,這世上最難降的妖魔是什么惑畴? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮航徙,結(jié)果婚禮上如贷,老公的妹妹穿的比我還像新娘。我一直安慰自己捉偏,他們只是感情好倒得,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夭禽,像睡著了一般霞掺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讹躯,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天菩彬,我揣著相機(jī)與錄音,去河邊找鬼潮梯。 笑死骗灶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秉馏。 我是一名探鬼主播耙旦,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼萝究!你這毒婦竟也來了免都?” 一聲冷哼從身側(cè)響起锉罐,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绕娘,沒想到半個(gè)月后脓规,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡险领,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年侨舆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绢陌。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挨下,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出下面,到底是詐尸還是另有隱情复颈,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布沥割,位于F島的核電站,受9級特大地震影響凿菩,放射性物質(zhì)發(fā)生泄漏机杜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一衅谷、第九天 我趴在偏房一處隱蔽的房頂上張望椒拗。 院中可真熱鬧,春花似錦获黔、人聲如沸蚀苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堵未。三九已至,卻和暖如春盏触,著一層夾襖步出監(jiān)牢的瞬間渗蟹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工赞辩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雌芽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓辨嗽,卻偏偏與公主長得像世落,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子糟需,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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

  • 前言 要想深入地掌握任何一門測試工具屉佳,對工具本身的架構(gòu)来破、原理、使用的協(xié)議及相關(guān)知識點(diǎn)都必須要有相關(guān)的了解和認(rèn)識忘古,才...
    讓技術(shù)更俗一點(diǎn)閱讀 4,728評論 3 55
  • Appium是一個(gè)自動(dòng)化測試開源工具徘禁,支持iOS平臺和Android平臺上的原生應(yīng)用,web應(yīng)用和混合應(yīng)用髓堪。App...
    sunnyaxin閱讀 3,045評論 0 5
  • 1.什么是Appium? Appium 是一個(gè)開源送朱、跨平臺的自動(dòng)化測試工具,用于測試原生和輕量移動(dòng)應(yīng)用干旁,支持 iO...
    六六_fiona閱讀 1,700評論 0 5
  • 0.小目標(biāo) 關(guān)于UI自動(dòng)化的定義驶沼,我想要的是自動(dòng)地按照流程去點(diǎn)擊頁面、輸入數(shù)據(jù)争群,不需要人去參與回怜,節(jié)省人工時(shí)間。比如...
    孢子菌閱讀 15,575評論 10 47
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理换薄,服務(wù)發(fā)現(xiàn)玉雾,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139