UI自動化測試之Airtest
阿新 • • 發佈:2021-10-26
本文主要講解UI自動化測試工具Airtest的使用方法。
官方文件:
https://airtest.doc.io.netease.com/
本文我們講解下Airtest的使用,主要學習目標有以下幾點:
(1)認識Airtest
(2)瞭解Airtest能做什麼
(3)Airtest安裝及環境搭建
(4)掌握Airtest圖形化api使用
(5)Airtest實現APP電商自動化測試
(6)Airtest連線ios真機實現自動化測試
(2)易操作:使用影象識別技術來定位UI元素,無需嵌入任何程式碼即可對遊戲和應用進行自動化測試。
(3)可擴充套件性:通過使用Airtest提供的命令列和Python API介面,可以輕鬆地在大規模裝置叢集上執行指令碼
(4)GUI工具:AirtestIDE是一個強大的GUI工具,可以幫助你錄製和除錯指令碼。
擴充套件:Airtest的3種影象演算法SURFMatching、TemplateMatching和BRISKMatching 深度對比。
參考博文:https://mp.weixin.qq.com/s/cGFvU9C7mBpsmnWgDLPW5A
(1)模板匹配 TemplateMatching
執行時長:kaze > sift > akaze > surf > brisk > brief > orb
識別效果:sift > surf > kaze > akaze > brisk > brief > orb
2、Airtest能做什麼
Airtest支援:Game、Windows應用、Andriod應用、iOS應用、web應用的自動化測試。
特點:
Game:藉助影象識別和UI層次結構,支援所有遊戲引擎和應用,多平臺,使用方便。
Android:Android源生應用測試的測試過程中, Air test可以發揮至關重要的作用, 即插即用。
Wino dws:支援Windows應用, 一次編寫, 跨平臺執行。
iOS:Airtest支援對iOS進行方便快捷的測試,可以通過Poco庫來快捷獲取iOS裝置頁面中的原生元素的位置和資訊。
Web:基於Chrome Devtools Protocol協議,自動錄製生成selenium指令碼, 精確定位與操作介面元素。
Airtest優點:
1)框架基於影象識別,UI和控制元件識別,操作簡單,功能簡潔。
2)對程式碼能力要求不高,容易上手。結合工具本身的指令碼錄製功能,開發指令碼速度快,適合版本快速迭代的要求。
3)可引入Python第三方庫,支援Python進行個性化指令碼程式設計。
4)可一鍵生成測試報告,報告美觀,清晰明瞭。
Airtest缺點:
1)最大的缺點是影象、控制元件定位不夠準確,如果不同裝置的尺寸、解析度不同,或者影象的背景色變化,控制元件圖案修改的話。
2) 因為是基於影象識別的框架,所以程式碼執行速度慢,容易造成影象識別不到。
總結:優點大於缺點,且影象識別準確度的問題有很多辦法可以改善、提高。
3、Airtest庫
Airtest有影象識別、Poco、selenium三大類庫。
4、Airtest環境搭建
(1)Python
輸入cmd開啟命令列視窗,執行命令:pip install -U airtest
說明:安裝Python的Airtest庫,通過Python程式碼直接呼叫Airtest庫的API方法。
提示:此方法需要有一定的Python基礎。AirtestIDE內建了Python3.6.5,親測Python3.6.5版本可以安裝airtest。
(2)GUI工具
工具:AirtestIDE
說明:AirtestIDE工具自帶Python環境,下載解壓即可使用,免安裝。
提示:使用工具可以錄製操作,也可以手動編寫呼叫API。
本次視訊教程學習GUI工具。
(3)下載AirtestIDE
官網下載:https://airtest.netease.com/home/changelog.html
(4)解壓
(5)啟動
雙擊AirtestIDE.exe可執行程式即可。
(6)Airtest頁面佈局
Airtest簡介及環境搭建
1、Airtest簡介 Airtest由網易團隊出品,是一個基於影象識別原理的跨平臺UI自動化測試框架,適用於遊戲和應用程式。 特點: (1)跨平臺:Airtest幾乎可以在所有平臺上執行遊戲和APP自動化- 優點是速度很快,缺點是無法跨解析度識別
- 一定有相對最佳的匹配結果
- 方法名:"tpl"
- 跨解析度識別
- 不一定有匹配結果
- 方法名列表:["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]
Airtest與安卓模擬器進行連線
常用的安卓模擬器:網易的MUMU、夜神、雷電等。我們這裡使用網易MUMU,直接下載安裝到C:\Program Files\MuMu 1、準備工作 (1)開啟開發者模式 一般安卓手機:進入設定—>系統(或關於手機)—>找到版本號,多點選幾次,就可以開啟開發者模式。 小康裝置:首頁下拉進入導航欄—>時間連續點選5次—>點選原生設定—>系統—>關於AIV—>版本號連續點選7次 說明:如果裝置已經開啟開發者模式,點選版本號會提示:您正處於開發者模式。 (2)開啟USB除錯模式 先開啟開發者模式,進入開發人員選項,可開啟USB除錯。 注意:一定要選擇USB配置:MIDI(開啟檔案傳輸)!!! (3)連線設定 a.啟動安卓模擬器 b.在Airtest視窗點選【重新整理ADB】或【遠端裝置連線】 c.使用備用連線引數,設定相容模式 AirtestIDE提供了3個備用的連線引數:Use javacap、Use ADB orientation和Use ADB touch ① 第一個Use javacap,是給部分無法正常看到手機畫面、minicap初始化失敗的手機或裝置用的,所以模擬器看到黑屏、部分特殊的平板等裝置可以考慮勾選這個選項。 ② 第二個Use ADB orientation是螢幕旋轉的,如果在安卓手機螢幕旋轉方向檢測有問題、或者是部分特殊的平板無法顯示正確的螢幕方向時可以勾選。 ③ 第三個Use ADB touch是傳送adb指令來點選螢幕,效果很差,速度也很慢,不建議勾選,只有在部分無法點選螢幕的特殊安卓裝置上才需要使用(例如智慧後視鏡、特殊型號的平板等裝置上) 正常情況下,手機都可以點選,如果無法被點選(比如小米裝置),一般都是因為手機設定有選項漏了開啟,特別是小米裝置要注意開啟允許模擬點選的設定。 (4)修改裝置地址及埠號(因為真機或模擬器都分不同的廠商) Airtest遠端連線,預設展示的是網易MUMU的埠號。如果使用其他廠商的模擬器,需要修改埠號。 常用模擬器的預設IP地址和埠號如下:Airtest影象庫(Touch、指令碼執行、測試報告)
1、學習目標 掌握touch方法應用 掌握指令碼執行 掌握測試報告檢視 理解影象識別擴充套件(位置、匹配度) 2、Airtest影象框架API檢視引數資訊 方法:將游標懸停到左側欄API上,氣泡顯示呼叫該方法所需要傳入的引數。 3、Touch方法 作用:觸控/點選動作 常用引數: v : 點選物件的影象或座標 times: 點選次數,預設是1 duration: 點選時間,預設是0.01秒 (1)需求: 使用Touch方法,點選啟動小康桌面應用(電視家) 執行指令碼測試是否成功 (2)需求實現步驟: a、新建指令碼型別選擇 .air Airtest專案:生成一個【專案名稱.air】的目錄,目錄下有一個【專案名.py】的檔案 .py 純Python(高階使用者):生成一個純Python的【專案名.py】的檔案 兩者區別和聯絡: 相同點:都是Python檔案 不同點:指令碼檔案的初始化程式碼不用,一個無法看到預設值,另一個可以看到預設值並可以修改。 提示:Airtest自帶Python直譯器及標準庫,無需單獨安裝Python。 b、使用Touch點選小康桌面應用(電視家) 左側點選Touch 右側拉選電視家icon圖示 c、執行指令碼 點選三角形的【執行】按鈕,或者使用快捷鍵F5 停止執行:Shift + F5 執行單行程式碼:選中程式碼行,右鍵,選中並單擊“只執行選中程式碼” d、檢視報告 方法1:點選選單欄【執行】——>開啟報告目錄 方法2:右鍵指令碼檔名稱Tab——>開啟報告檔案目錄 方法3:使用快捷鍵:Ctrl + L 方法4:cmd開啟命令列視窗,進入指令碼所在路徑,執行如下命名: airtest report D:\zxt\AirtestIDE\xiaokang.air\xiaokang2_auto_script.py --log_root D:\zxt\AirtestIDE\xiaokang.air\log --outfile D:\zxt\AirtestIDE\xiaokang.air\log\xiaokang2_auto_script.log\log.html --static_root D:\zxt\AirtestIDE\airtest\report --lang zh --export D:/zxt/AirtestIDE/xiaokang.air/log 方法5:右鍵指令碼檔名稱Tab——>匯出報告 這種方法,可以將相對路徑的圖片資源和靜態資源整個打包,後續傳送給其他檢視。 方法6: # generate html report from airtest.report.report import simple_report simple_report(__file__,logpath=True,output='D:\zxt\AirtestIDE\xiaokang.air\report\log.html') 4、影象識別擴充套件 在指令碼編輯區域,雙擊圖片,展示Image Editor彈框,如下: filename: 圖片檔名稱,自動生成 threshold: 閾值或臨界值,只有達到設定的閾值,影象識別才能成功。 target pos: 擊位的目標點置,預設是位置5。圖片的目標位置一共分上、中、下9點位,正中間區域是位置5.Airtest影象API-wait
wait()方法 作用:在等待介面元素出現,預設0.5s找一次,最多找20s。如果找到則返回返回圖片中心點座標;否則,raise TargetNotFoundError 常用引數: v:圖片 timeout:等待超時時間,預設是20s interval:每次匹配的時間間隔 需求:進入小康首頁,等待“娛樂”icon出現,0.1s查詢一次,持續3s,如果找到,點選“娛樂”icon。 小結: (1)wait方法解決什麼問題? 解決介面元素存在,但載入需要時間的問題。 第6課、Airtest影象API-swipe swipe方法基本使用: 作用:從螢幕一個位置滑動到另一個位置 常用引數: v1: 圖片 或 座標(x,y) v2: 圖片 或 座標(x,y),從v1滑動到v2 vector: [x,y]錄製時自動生成,記錄了螢幕中的滑動比例,向右為x軸正方向,向下為y軸正方向。Airtest影象API(text、snapshot、sleep、keyevent)
1、text方法 作用:輸入文字操作 常用引數: text: 要輸入的文字 (注:輸入的位置為當前頁面游標焦點所在的位置,一般與touch方法一起使用) enter: 完成輸入後自動執行Enter操作,預設為True 2、keyevent方法 作用:模擬鍵盤按鈕輸入,支援鍵碼,如3為home鍵 常用引數: keyname: 固定鍵名或鍵碼,參考:https://www.cnblogs.com/vip136510786/p/14705567.html 3、snapshot方法 作用:擷取當前螢幕圖片,可以在測試報告中顯示。 常用引數: filename: 儲存截圖為指定檔案。 msg: 描述測試點,可在html報告中呈現。 4、sleep方法 作用:暫停時間 常用引數: secs: 暫停時間,單位秒,預設1.0s 示例需求: 啟動百年奧萊app 點選搜尋輸入框 輸入:耳機 完成螢幕截圖 暫停3秒 按home鍵,返回桌面Airtest影象API-斷言方法
1、assert_exists方法 作用:斷言頁面存在某元素,結果是布林型別值 常用引數: v: 圖片 msg:描述測試點 return:找到圖片,則返回圖片中心點座標;否則,將raise AssertionError 2、assert_not_exists方法 作用:斷言頁面不存在某元素,結果是布林型別值 常用引數: v: 圖片(注:判斷當前頁面中不存在指定圖片,不存在則通過,存在則不通過) msg:描述測試點 3、assert_equal方法 作用:判斷第一個值和第二個值相等 常用引數: first:第一個值 second:第二個值 msg:描述此斷言語句對應的測試點內容。 4、assert_not_equal方法 作用:判斷第一個值和第二個值不相等 常用引數: first:第一個值 second:第二個值 msg:描述此斷言語句對應的測試點內容。 需求: 啟動百年奧萊APP 判斷首頁是否存在搜尋圖示 點選底部【分類】TabBar 斷言不存在搜尋圖示 斷言False與assert_exists(搜尋圖示圖片)的值是否相等 檢視測試報告如下:Airtest影象框架實戰(app登入、退出)
1、需求: 啟動釘釘APP 實現登入、退出業務自動化,並斷言是否登入成功、退出成功 2、拓展: 如何解決無法輸入賬號的問題:MUMU模擬器設定——>語言和輸入法——>將輸入法改為nemu-vinput 切換程式碼模式:在程式碼編輯區域,選中程式碼行,右鍵選擇並點選“圖片/程式碼模式切換”。Airtest-實戰iOS真機(環境搭建)
1、環境搭建需要 (1)硬體 一臺蘋果電腦(執行xcode) 一部iphone手機(執行APP) (2)軟體 iOS-Tagent(WebDriver伺服器) xcode(iOS整合開發工具,執行iOS-Tagent) iproxy(代理工作,做埠對映) AirtestIDE(影象識別自動化測試工具) 2、軟體功能 (1)iOS-Tagent 作用:在手機上建立一個WebDriver伺服器,可用於遠端控制iOS裝置,定位UI元素。 下載:https://github.com/facebook/archive/WebDriverAgent 執行依賴:xcode (2)xcode 作用:iOS整合開發工具,主要作用為執行WebDriverAgent檔案到手機中 下載:appStore搜尋xcode 執行依賴:開發者賬號 xcode設定: 前提:將真機使用資料線連線上mac電腦 測試執行WebDriverAgentRunner到手機 如果失敗,排查思路: ①在xcode中點選Test後,第一次將WebdriverRunner時,手機需要信任該專案(設定->通用-> 裝置管理) ②在手機中啟用UI自動化(設定->開發者->EnableUIAutomation) ③如果有其他異常,根據異常提示資訊自行參考百度或訪問 https://github.com/appium/appium/blob/master/docs/en/drivers/ios-xcuitest-real-devices.md 查閱相關解決方案 xcode需要的操作: a.新增開發者賬號,普通apple ID即可 b.配置WebDriverAgent(Team、Product Bundle Identifier) c.測試執行WebDriverAgentRunner到手機Airtest-實戰iOS真機(連線裝置)
1、連線真機注意事項 (1)在xcode中點選Test前, 檢查專案預設終端是否選擇真機裝置。 (2)點選在xcode中Test之後, 要檢視控制資訊, 如果控制檯沒任何資訊輸出,可以等待或者多Test幾次, 直到控制檯輸出啟動相關資訊 (3)xcode配置iOS-T agent只需第一次配置,之後使用無需在單獨配置, 切莫亂修改引數; (4)真機裝置中, 要開啟自動化測試和信任iOS-T agent專案 2、連線真機步驟 (1)將真機使用資料線連線電腦 (2)啟動xcode並開啟配置好的iOS-T agent專案(選單-Product->Test啟動自動化服務程式) (3)開啟終端執行:i proxy 81008100(啟動埠對映服務程式) (4)啟動Air Test IDE工具(選擇【連線ios裝置】->點選【connect】)Airtest-實戰iOS真機(釘釘登入、退出)
案例總結: 1、API使用方法和安卓沒有區別 2、真機速度快,輸入使用者名稱和密碼時需要暫停一會 3、ISO和安卓區別在於環境搭建其他參考博文
1、Airtest介面功能介紹和示例總結 https://mp.weixin.qq.com/s?__biz=MzUxMDc4NTkwMA==&mid=2247485284&idx=1&sn=0d9852538ce0673127a2f1662ee58fe7&chksm=f97ce767ce0b6e715ff488d87743a45903bb080d2cebcb596ad4a1dc718b101f685d26bb2086&token=914082035&lang=zh_CN#rd https://testerhome.com/articles/27089 2、Airtest提高截圖指令碼相容性的經驗總結 https://www.cnblogs.com/AirtestProject/p/13603105.html https://testerhome.com/topics/20916