技術(shù)分享 | Appium 用例錄制

本文節(jié)選自霍格沃茲測試開發(fā)學(xué)社內(nèi)部教材

Appium Desktop 是一款用于 Mac、Windows 和 Linux 的開源應(yīng)用,它提供了 Appium Server,Appium Inspector 以及相關(guān)的工具的組合。

Appium Desktop 是個(gè)圖形界面,可以設(shè)置選項(xiàng)、啟動(dòng)/停止服務(wù)器、查看日志等功能。Appium Inspector 可以查看應(yīng)用程序的元素,并進(jìn)行基本的交互、錄制等功能。

下載及安裝

下載地址:

https://github.com/appium/appium-desktop/releases

下載對應(yīng)系統(tǒng)的 Appium 版本,安裝完成之后,點(diǎn)擊 “Start Server”,就啟動(dòng)了 Appium Server。

在啟動(dòng)成功頁面點(diǎn)擊右上角的放大鏡,進(jìn)入到創(chuàng)建 Session 頁面。配置好 desirecapability 信息之后,點(diǎn)擊“Start Session”啟動(dòng)會(huì)話就展示出下面的頁面。Appium Inspector 元素定位頁面:

左側(cè)為屏幕快照:可以在左側(cè)使用鼠標(biāo)選擇 UI 元素,會(huì)看到它們高亮顯示。

中間為頁面 DOM 樹結(jié)構(gòu):在應(yīng)用層次結(jié)構(gòu)中會(huì)直接將元素的屬性值標(biāo)記在樹上,這對于 Appium 定位元素很方便。

右側(cè)為元素的詳細(xì)信息:當(dāng)元素被選中,右側(cè)會(huì)展示出元素的詳細(xì)屬性信息列表。這些屬性將決定 Appium 定位元素的策略。

另外 Appium Inspector 還提供了頁面刷新,頁面操作,錄制,元素的點(diǎn)擊、輸入等功能。

Appium自動(dòng)化用例錄制

Appium Inspect 提供了定位元素與錄制用例的功能,使用 Appium Inspect 可以查看移動(dòng)設(shè)備的 UI 布局結(jié)構(gòu),方便腳本的編寫和生成。下面以 Android 系統(tǒng)為例。在 Android 模擬器上安裝 ApiDemos-debug.apk 應(yīng)用。

測試應(yīng)用下載地址:

https://github.com/appium/sample-code/raw/master/sample-code/apps/ApiDemos/bin/ApiDemos-debug.apk

下載該 apk 并安裝到測試設(shè)備,之后會(huì)基于該 app 進(jìn)行自動(dòng)化測試。

在錄制腳本前啟動(dòng)測試設(shè)備,并且通過命令行查看該設(shè)備已連接成功。使用下面的命令查看設(shè)備是否連接,展示出下面的內(nèi)容,即說明設(shè)備已連接。

$ adb devices
List of devices attached
emulator-5554   device

上面的結(jié)果中,“emulator-5554” 代表設(shè)備的名稱,“device” 代表設(shè)備的狀態(tài),說明設(shè)備已連接。如果是其它狀態(tài),需要重新連接設(shè)備,或者在設(shè)備上檢查是否開啟開發(fā)者模式,以及打開 USB 調(diào)試模式。

獲取應(yīng)用包名和頁面名稱

移動(dòng)端的包名(也就是 Package)作為每個(gè) app 的唯一標(biāo)識(shí),每個(gè) APP 都有自己的 Package Name,且每個(gè)設(shè)備上相同的包名的 APP,只允許安裝一個(gè)。

頁面(也就是 Activity)是 Android 組件中最基本,也是常見的四大組件之一,可以理解為一個(gè)頁面就是一個(gè) Activity,移動(dòng)端打開一個(gè) app 的頁面,在操作頁面的時(shí)候會(huì)發(fā)生頁面的跳轉(zhuǎn),也就是 Activity 之間發(fā)生了切換。在編寫測試腳本之前,首先要獲取應(yīng)用的包名以及啟動(dòng)頁的 Activity 名字。

獲取包名,終端進(jìn)入 aapt 工具所在目錄(Android SDK 的 build-tools 目錄下),輸入:

aapt dump badging [app名稱].apk

運(yùn)行結(jié)果:

圖中“package:name”對應(yīng)的結(jié)果是包名,“Lauchable-activity:name”對應(yīng)的結(jié)果是“包名+頁面名”。但是有些不符合規(guī)范的應(yīng)用,通過 aapt 命令無法獲取到 “Lauchable-activity:name” 這部分內(nèi)容。

針對上面的問題,就需要在測試設(shè)備上啟動(dòng) APP,然后在終端輸入如下命令(Mac OS / Linux 系統(tǒng)):

adb logcat | grep ActivityManager

運(yùn)行結(jié)果如下圖:

Appium-desktop自動(dòng)化用例錄制

1. 啟動(dòng) Appium Server

使用 Appium Inspector 錄制測試腳本,首先需要啟動(dòng) Appium-desktop,點(diǎn)擊“Start Server”,如下圖:

2. 打開 Appium Inspect 工具

點(diǎn)擊右上角“Start inspector Session”按鈕,打開 inspector 工具,圖形頁面如下:

Inspector 就是探測器,給它相應(yīng)的參數(shù),啟動(dòng) app 幫你分析移動(dòng)端 APP 的 UI 界面,還可以使用它錄制腳本,支持導(dǎo)出多種語言的測試腳本。

3. 配置 Desired Capabilities 信息

  • platfromName:使用哪個(gè)移動(dòng)操作系統(tǒng)平臺(tái),這里可以填 Android、iOS
  • deviceName:設(shè)備名稱,可以隨便填,但必須得有此項(xiàng)
  • appPackage:要啟動(dòng)的 android 應(yīng)用程序包(“io.appium.android.apis”)
  • appActivity:App 啟動(dòng)的首頁 Activity(“.ApiDemos”或者“io.appium.android.apis/.ApiDemos”)

4. 啟動(dòng) Session

點(diǎn)擊 “Start Session”,錄制腳本。

對于 Appium 的初學(xué)者,可以通過錄制功能,了解編寫用例的時(shí)候需要使用哪些 API,有哪些編寫規(guī)范等,可以作為一個(gè)很好的參考。

點(diǎn)擊“開始錄制”按鈕(小眼睛圖標(biāo)):

左側(cè)選擇要操作的頁面元素,在右側(cè)選擇要做的操作:

Tap 為點(diǎn)擊元素 Send keys 為文本框錄入 Clear 為清空文本框

利用上圖 1,2 步組合,就可以實(shí)現(xiàn)對 app 的操作。比如在截取的頁面中鼠標(biāo)點(diǎn)擊“Views”->點(diǎn)擊 Tap,再點(diǎn)擊“Buttons”->點(diǎn)擊 Tap。每操作一步,都會(huì)自動(dòng)生成腳本,如圖:

默認(rèn)生成的語言為 Java-unit,如果想生成其他語言,只要點(diǎn)擊下拉欄選擇相應(yīng)選項(xiàng)即可,這里切換成 Python 語言。

把代碼復(fù)制粘貼到編輯器中,就可以運(yùn)行。代碼如下:

from appium import webdriver

caps = {}
caps["platformName"] = "android"
caps["deviceName"] = "demo"
caps["appPackage"] = "io.appium.android.apis"
caps["appActivity"] = ".ApiDemos"
caps["autoGrantPermissions"] = "true"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

el2 = driver.find_element_by_id("tv.danmaku.bili:id/expand_search")
el2.click()
el3 = driver.find_element_by_accessibility_id("搜索查詢")
el3.send_keys("霍格沃茲測試學(xué)院")
driver.quit()

上面是錄制出來的代碼,錄制生成的代碼需要手動(dòng)優(yōu)化,添加需要的單元測試框架(比如 Pytest,Unittest)使代碼更優(yōu)雅。代碼錄制對剛?cè)腴T的人來說還是比較實(shí)用的,它的缺點(diǎn)也是很明顯:

  • 所有的代碼都會(huì)在一個(gè)文件里,顯得代碼非常的冗余
  • 不能解決工作中大部分的場景

獲取更多相關(guān)資料:請?zhí)砑觱x,ceshiren001
https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=jianshu&timestamp=1654044404&author=MM

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

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

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