Appium1.6.4 +JAVA+TestNg+Mac教程


Appium和它的設計思想


什么是Appium?

1、appium是開源的移動端自動化測試框架;

2、appium可以測試原生的、混合的、以及移動端的web項目;

3、appium可以測試ios,android應用(當然了,還有firefoxos);

4、appium是跨平臺的,可以用在osx,windows以及linux桌面系統上;

Appium的設計哲學

1、不需要為了自動化而且重新編譯或修改測試app;

2、不應該讓移動端自動化測試限定在某種語言和某個具體的框架;也就是說任何人都可以使用自己最熟悉最順手的語言以及框架來做移動端自動化測試;

3、不要為了移動端的自動化測試而重新發明輪子,重新寫一套驚天動地的api;也就是說webdriver協議里的api已經夠好了,拿來改進一下就可以了;

4、移動端自動化測試應該是開源的;

Appium的設計思想

1、為了能夠實現哲學里描述的第2條,也就是不應該讓移動端自動化測試限定在某種語言和某個具體的框架;也就是說任何人都可以使用自己最熟悉最順手的語言以及框架來做移動端自動化測試;appium選擇了client-server的設計模式。只要client能夠發送http請求給server,那么的話client用什么語言來實現都是可以的,這就是appium及webdriver如何做到支持多語言的;

2、為了能夠實現不要為了移動端的自動化測試而重新發明輪子,重新寫一套驚天動地的api;也就是說webdriver協議里的api已經夠好了,拿來改進一下就可以了;這個思想,appium擴展了webdriver的協議,沒有自己重新去實現一套。這樣的好處是以前的webdriverapi能夠直接被繼承過來,以前的webdriver各種語言的binding都可以拿來就用,省去了為每種語言開發一個client的工作量;

3、appium是開源的,這也實現了哲學思想里的最后一點

Appium的基本概念


C/S架構

appium的核心其實是一個暴露了一系列REST API的server。

這個server的功能其實很簡單:監聽一個端口,然后接收由client發送來的command。翻譯這些command,把這些command轉成移動設備可以理解的形式發送給移動設備,然后移動設備執行完這些command后把執行結果返回給appiumserver,appiumserver再把執行結果返回給client。

在這里client其實就是發起command的設備,一般來說就是我們代碼執行的機器,執行appium測試代碼的機器。狹義點理解,可以把client理解成是代碼,這些代碼可以是java/ruby/python/js的,只要它實現了webdriver標準協議就可以。

這樣的設計思想帶來了一些好處:

可以帶來多語言的支持;

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


C/S架構

Session

session就是一個會話,在webdriver/appium,你的所有工作永遠都是在session start后才可以進行的。一般來說,通過POST /session這個URL,然后傳入Desired Capabilities就可以開啟session了。

開啟session后,會返回一個全局唯一的session id,以后幾乎所有的請求都必須帶上這個session id,因為這個seesionid代表了你所打開的瀏覽器或者是移動設備的模擬器。

進一步思考一下,由于session id是全局唯一,那么在同一臺機器上啟動多個session就變成了可能,這也就是selenium gird所依賴的具體理論根據。

session就是一個會話,在webdriver/appium,你的所有工作永遠都是在session start后才可以進行的。一般來說,通過POST /session這個URL,然后傳入Desired Capabilities就可以開啟session了。

開啟session后,會返回一個全局唯一的session id,以后幾乎所有的請求都必須帶上這個session id,因為這個seesionid代表了你所打開的瀏覽器或者是移動設備的模擬器。

進一步思考一下,由于session id是全局唯一,那么在同一臺機器上啟動多個session就變成了可能,這也就是selenium gird所依賴的具體理論根據。

Desired Capabilities

Desired Capabilities攜帶了一些配置信息。從本質上講,這個東東是key-value形式的對象。你可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json對象。實際上Desired Capabilities在傳輸時就是json對象。

Desired Capabilities最重要的作用是告訴server本次測試的上下文。這次是要進行瀏覽器測試還是移動端測試?如果是移動端測試的話是測試android還是ios,如果測試android的話那么我們要測試哪個app?server的這些疑問Desired Capabilities都必須給予解答,否則server不買賬,自然就無法完成移動app或者是瀏覽器的啟動。

automationName:使用哪種自動化引擎。appium(默認)還是Selendroid?

platformName:使用哪種移動平臺。iOS,?Android,orFirefoxOS?

deviceName:啟動哪種設備,是真機還是模擬器?iPhone

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

app:應用的絕對路徑,注意一定是絕對路徑。如果指定了appPackage和appActivity的話,這個屬性是可以不設置的。另外這個屬性和browserName屬性是沖突的。

browserName:移動瀏覽器的名稱。比如Safari' for

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

udid:物理機的id。比如1ae203187fc012g。

Appium的環境搭建


Appium支持Windows和Mac端,如果你在Windows上安裝appium,你沒法使用預編譯專用于OS X的.app文件,你也將不能測試IOS apps,因為appium依賴OS X專用的庫(IOSSDK)來支持IOS測試。這意味著你只能通過在mac上來運行IOS的app測試。所有的測試工具都是這樣,只有在MAC平臺上才可以測試IOS設備。所以我們采用AppiumforMAC來為大家說明Appium的環境搭建、測試腳本及使用方法。Appium在mac上環境搭建有2種方式,一種是命令方式,一種是直接安裝dmgGUI版本方式搭建環境。

命令形式搭建Appium環境

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的安裝

以上所有安裝完成之后,執行appium-doctor檢測Appium環境是否搭建成功,如果成功,則如下圖所示。

Appium命令環境


Appium GUI版本安裝

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

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


Appium桌面版

Appium client的安裝

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

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

Appium client有很多種,有java-client、php-client、python-client、node-adb-client、perl-client、ruby-lib

Java-Client的安裝

使用IEDA新建maven工程

為工程添加如下依賴

Java-Client依賴

移動端的安裝

Android的虛擬機可以使用Genymotion也可以使用真機測試。


Android虛擬機

IOS端可以使用Xcdoe自帶的虛擬機,也可以使用真機測試。

Appium Java-Client實例


AppiumServer端啟動

命令行形式啟動

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

也可以通過桌面版啟動


設置服務器地址


Appium日志界面

Java測試腳本簡單示例

在工程內添加依賴


TestNg依賴

在test目錄下構建層級目錄,以Android為例新建測試類


層級目錄

測試腳本的書寫


Java測試腳本

運行測試腳本

首先啟動對應的模擬器或者連接對應的真機設備

可以直接對單個腳本測試,也可以使用maven插件命令同時對多個腳本進行測試。

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

maven編譯插件


關于控件定位


Android的控件定位

進入SDK/Tools目錄,找到uiautomatorviewer鼠標拖到終端里,回車顯示如下界面。點擊框選按鈕,找到你要找的控件,得到Resourceid.


Android控件定位

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


IOS的控件定位

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

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

使用命令npm install macaca-cli -g安裝macaca,然后運行macaca doctor檢測環境是否正常。


若不正常,哪項顯示為紅色相應的解決,可以網上找一下資料,如我的IOS環境有2項異常,分別用brew install ios-webkit-debug-proxy和brew install usbmuxd修復,再次運行macaca doctor,IOS環境正常。


終端運行instruments –s查看當前所有可用設備,得到相應設備UUID

終端運行app-insepctor –u 設備UUID即可啟動inspector,會從瀏覽器打開一個網頁,如下圖所示。注意點:XcodeSwift版本要大于等于3.1,否則會出現異常無法啟動。使用xcrun swift–version命令查看當前Swift版本。


app-inspector界面

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


關于WebView頁面元素的定位

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

然后在瀏覽器中打開網頁對應地址,通過開發者工具定位元素的id或者class,通過頁面元素標簽里的這2個屬性定位WebView頁面元素。如果不知道網頁地址,可以使用Chrome瀏覽器,手機連接電腦或者開啟模擬器,輸入chrome://inspect/#devices。就會顯示模擬器或者真機設備上WebView的地址。

IOS的WebView元素定位方法還是使用app-inspector工具來進行定位。可以準確獲取每個頁面的元素的Xpath。




作者:郭翰林

聯系方式:QQ群:264587303

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 要想深入地掌握任何一門測試工具,對工具本身的架構、原理、使用的協議及相關知識點都必須要有相關的了解和認識,才...
    0xAI閱讀 4,773評論 3 55
  • Appium是一個自動化測試開源工具,支持iOS平臺和Android平臺上的原生應用,web應用和混合應用。App...
    sunnyaxin閱讀 3,066評論 0 5
  • 1.什么是Appium? Appium 是一個開源、跨平臺的自動化測試工具,用于測試原生和輕量移動應用,支持 iO...
    六六_fiona閱讀 1,714評論 0 5
  • 0.小目標 關于UI自動化的定義,我想要的是自動地按照流程去點擊頁面、輸入數據,不需要人去參與,節省人工時間。比如...
    孢子菌閱讀 15,635評論 10 47
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,908評論 18 139