UI自動化測試之Airtest

官方文檔:
本文我們講解下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與Android模擬器進行連接

常用的Android模擬器:網易的MUMU、夜神、雷電等。我們這裡使用網易MUMU,直接下載安裝到C:\Program Files\MuMu
1、準備工作
(1)打開開發者模式
一般Android手機:進入設置—>系統(或關於手機)—>找到版本號,多點擊幾次,就可以開啟開發者模式。
小康設備:首頁下拉進入導航欄—>時間連續點擊5次—>點擊原生設置—>系統—>關於AIV—>版本號連續點擊7次
說明:如果設備已經打開開發者模式,點擊版本號會提示:您正處於開發者模式。
(2)打開USB調試模式
先打開開發者模式,進入開發人員選項,可開啟USB調試。
注意:一定要選擇USB配置:MIDI(打開文件傳輸)!!!
(3)連接設置
a.啟動Android模擬器
b.在Airtest窗口點擊【刷新ADB】或【遠程設備連接】
c.使用備用連接參數,設置兼容模式
AirtestIDE提供了3個備用的連接參數: Use javacap 、Use ADB orientation 和 Use ADB touch
① 第一個 Use javacap ,是給部分無法正常看到手機畫面、minicap初始化失敗 的手機或設備用的,所以模擬器看到黑屏、部分特殊的平板等設備可以考慮勾選這個選項。
② 第二個 Use ADB orientation 是 螢幕旋轉 的,如果在Android手機螢幕旋轉方向檢測有問題、或者是部分特殊的平板無法顯示正確的螢幕方向時可以勾選。
③ 第三個 Use ADB touch 是 發送adb指令來點擊螢幕 ,效果很差,速度也很慢,不建議勾選,只有在部分無法點擊螢幕的特殊Android設備上才需要使用(例如智慧後視鏡、特殊型號的平板等設備上) 正常情況下,手機都可以點擊,如果無法被點擊(比如小米設備),一般都是因為手機設置有選項漏了打開,特別是小米設備要注意 開啟允許模擬點擊 的設置。
 
(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: 固定鍵名或鍵碼,參考://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)
③如果有其他異常,根據異常提示資訊自行參考百度或訪問
//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使用方法和Android沒有區別
2、真機速度快,輸入用戶名和密碼時需要暫停一會
3、ISO和Android區別在於環境搭建

其他參考博文

1、Airtest介面功能介紹和示例總結
 
 
2、Airtest提高截圖腳本兼容性的經驗總結