UI自動化測試之Airtest

淘氣的包子發表於2021-10-26
官方文件:
本文我們講解下Airtest的使用,主要學習目標有以下幾點:
(1)認識Airtest
(2)瞭解Airtest能做什麼
(3)Airtest安裝及環境搭建
(4)掌握Airtest圖形化api使用
(5)Airtest實現APP電商自動化測試
(6)Airtest連線ios真機實現自動化測試

Airtest簡介及環境搭建

1、Airtest簡介
Airtest由網易團隊出品,是一個基於影像識別原理的跨平臺UI自動化測試框架,適用於遊戲和應用程式。
特點:
(1)跨平臺:Airtest幾乎可以在所有平臺上執行遊戲和APP自動化
(2)易操作:使用影像識別技術來定位UI元素,無需嵌入任何程式碼即可對遊戲和應用進行自動化測試。
(3)可擴充套件性:通過使用Airtest提供的命令列和Python API介面,可以輕鬆地在大規模裝置叢集上執行指令碼
(4)GUI工具:AirtestIDE是一個強大的GUI工具,可以幫助你錄製和除錯指令碼。
 
擴充套件:Airtest的3種影像演算法SURFMatching、TemplateMatching和BRISKMatching 深度對比。
(1)模板匹配 TemplateMatching
  • 優點是速度很快,缺點是無法跨解析度識別
  • 一定有相對最佳的匹配結果
  • 方法名:"tpl"
(2)特徵點匹配
  • 跨解析度識別
  • 不一定有匹配結果
  • 方法名列表:["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]
特徵點匹配演算法的效能對比結論:
記憶體佔用:kaze > sift > akaze > surf > brief > brisk > orb
CPU佔用:kaze > surf > akaze > brisk > sift > brief > orb
執行時長: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
(4)解壓
(5)啟動
雙擊AirtestIDE.exe可執行程式即可。
(6)Airtest頁面佈局
 

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元素。
執行依賴: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介面功能介紹和示例總結
 
 
2、Airtest提高截圖指令碼相容性的經驗總結
 
 
 
 

相關文章