Windows項目里的圖像識別框架Airtest自動化測試實踐

来源:https://www.cnblogs.com/valveszhishi/archive/2022/08/02/16542601.html
-Advertisement-
Play Games

head.s 參考 [github這個博主的][ https://github.com/sunym1993/flash-linux0.11-talk ] 改變棧頂位置 _pg_dir: startup_32: movl $0x10,%eax mov %ax,%ds mov %ax,%es mov % ...


回顧我上個星期分享了​​《 高效編寫C#圖像處理程式(3) Rgb=>Lab,圖像缺陷檢測的案例》​​,但sikuli看起來怎麼都像是上個世紀的界面風格,且功能過於簡陋。而同樣基於圖像識別框架的Airtest,則無疑強大了許多,本次分享的內容是基於Airtest實現Windows應用的自動化測試,內容大綱:

  • Airtest框架介紹:Airtest適用項目、Airtest特點、Airtest的優勢
  • Airtest框架組成、原理
  • Airtest環境搭建及IDE的簡單使用
  • Airtest開展Windows應用自動化測試實踐:
    連接Windows應用
    Windows常用API
    編寫測試代碼
    設計測試用例
    運行效果
    查看測試報告
  • 總結與思考

一、Airtest框架介紹

1.Airtest介紹

Airtest是網易出品的一款基於圖像識別和Poco控制項識別的一款UI自動化測試工具。這個框架設計來源於新穎的圖形腳本語言Sikuli,關於Sikuli框架可見上一篇分享​​《基於Sikuli GUI圖像識別框架的PC客戶端自動化測試實踐》​​​。和Sikuli框架的原理一樣,用戶不需要一行行的去寫代碼,而是用屏幕截屏的方式,用截出來的圖形擺列組合成神器的程式,這是Airtest的一部分。另外,Airtest也可以基於poco這個UI控制項搜索框架,通過控制項的名稱、id之類的來定位目標控制項,原理類似於 appium。官網:​​http://airtest.netease.com/ ​​

2.Airtest適用項目

基於圖像識別框架Airtest的Windows項目自動化測試實踐_Windows自動化測試基於圖像識別框架Airtest的Windows項目自動化測試實踐_Windows自動化測試_02

3.Airtest特點

  • 跨平臺
  • 易操作
  • 可擴展
  • 支持GUI編輯器

4.Airtest的優勢

相比於其他的自動化測試框架,Airtest主要有如下兩個優勢:

  • 大幅度降低自動化腳本的編寫和維護成本

基於圖像識別框架Airtest的Windows項目自動化測試實踐_Windows自動化測試_03基於圖像識別框架Airtest的Windows項目自動化測試實踐_自動化測試_04

  • 解決游戲測試的痛點

二、Airtest框架組成、原理

1.Airtest框架組成

基於圖像識別框架Airtest的Windows項目自動化測試實踐_自動化測試_05

  • Airtest:是一個跨平臺的、基於圖像識別的UI自動化測試框架,適用於游戲和App,支持平臺有Windows、 Android和iOS;
  • Poco:是一款基於UI控制項識別的自動化測試框架,目前支持Unity3D/cocos2dx/Android原生app/iOS原生app/ 微信小程式,也可以在其他引擎中自行接入poco-sdk來使用;
  • AirtestIDE:跨平臺的UI自動化測試編輯器,內置了Airtest和Poco的相關插件功能,能夠快速簡單地 編寫Airtest和Poco代碼;
  • AirLab:真機自動化雲測試平臺,目前提供了TOP100手機相容性測試、海外雲真機相容性測試等服務;

2.Airtest工作原理

基於圖像識別框架Airtest的Windows項目自動化測試實踐_GUI自動化測試_06

三、Airtest環境搭建及IDE的簡單使用

官方文檔:​​https://airtest.doc.io.netease.com/IDEdocs/getting_started/AirtestIDE_install/​​

1.下載安裝

1)安裝python

由於Airtest框架是基於python語言開發,本地需要搭建python相關環境,建議使用python3,​Python 下載地址:​​https://www.python.org/downloads/​​​

2)下載AirtestIDE客戶端

AirtestIDE客戶端下載:

Windows​系統用戶在官網上下載對應32位或是64位版本的zip包,解壓後得到AirtestIDE文件夾,雙擊AirtestIDE/AirtestIDE.exe即可啟動

基於圖像識別框架Airtest的Windows項目自動化測試實踐_自動化測試_07

2.Airtest IDE使用

1)生成報告

Airtest運行完成後,會自動生成一份報告,通過下圖按鈕可以查看,點擊後會自動啟動瀏覽器查看報告

基於圖像識別框架Airtest的Windows項目自動化測試實踐_GUI自動化測試_08基於圖像識別框架Airtest的Windows項目自動化測試實踐_GUI自動化測試_09

2)圖片/代碼模式切換

Airtest IDE中右鍵,即可兩種模式相互切換

基於圖像識別框架Airtest的Windows項目自動化測試實踐_Windows自動化測試_10基於圖像識別框架Airtest的Windows項目自動化測試實踐_自動化測試_11

切換後的效果如下:

基於圖像識別框架Airtest的Windows項目自動化測試實踐_GUI自動化測試_12基於圖像識別框架Airtest的Windows項目自動化測試實踐_自動化測試_13

四、Airtest開展Windows應用自動化測試實踐

1.連接Windows應用

連接Windows應用有三種方法,分別是:

1)通過搜索視窗連接

設備窗-Windows視窗連接-搜索視窗,選擇窗基於圖像識別框架Airtest的Windows項目自動化測試實踐_Windows自動化測試_15

2)通過句柄連接

(由於句柄容易發生變化,因此不推薦此連接方式):下圖的67330即為企業微信的句柄

基於圖像識別框架Airtest的Windows項目自動化測試實踐_Windows自動化測試_17

3)通過正則匹配應用應用標題進行連接

if not cli_setup:
auto_setup(__file__, logdir=True, devices=["Windows:///?title_re=.*閱雲*"])

2.Windows常用API

官方文檔:​​https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.win.win.html​​

源碼:​​https://airtest.readthedocs.io/zh_CN/latest/_modules/airtest/core/win/win.html​​

  • connect:連接設備
  • shell:執行cmd命令
  • snapshot:截圖
  • keyevent:執行鍵盤事件
  • text:輸入文本
  • key_press:按下某個按鍵
  • key_release:釋放某個按鍵
  • touch:滑鼠點擊事件
  • double_click:滑鼠雙擊
  • swipe:滑動
  • move_mouse:移動滑鼠
  • mouse_down:按下滑鼠(左/右)鍵
  • mouse_up:釋放滑鼠(左/右)鍵

3.編寫測試代碼

先看下待測試的windows應用的頁面佈局:

基於圖像識別框架Airtest的Windows項目自動化測試實踐_GUI自動化測試_18

1)代碼構成

基於圖像識別框架Airtest的Windows項目自動化測試實踐_Windows自動化測試_19基於圖像識別框架Airtest的Windows項目自動化測試實踐_GUI自動化測試_20

  • 導入核心api和初始化客戶端的方法
__author__ = "Administrator"
import random
from airtest.core.api import *
from airtest.cli.parser import cli_setup
  • 連接windows應用
if not cli_setup:
auto_setup(__file__, logdir=True, devices=["Windows:///?title_re=.*閱雲*"])
  • Airtest IDE遵循python編碼風格,因此可以將各個測試動作/場景封裝成一個一個的函數,當然也可以封裝在其他文件里,然後導入引用

基於圖像識別框架Airtest的Windows項目自動化測試實踐_自動化測試_21基於圖像識別框架Airtest的Windows項目自動化測試實踐_GUI自動化測試_22

2)案例

  • 發送文本消息:

操作步驟為:進入聊天視窗>輸入文本內容>發送

def send_text(time):
setup_send_msg()
for i in range(time):
text("這是AIRTEST發送的第%s條消息"%str(i))
keyevent("{ENTER}")
keyevent("{ENTER}")

 

  • 截圖發送

點擊截圖按鈕>滑動滑鼠拉取截圖區域>確認發送截圖

操作步驟為:進入聊天視窗>點擊截圖按鈕>滑動滑鼠拉取截圖區域>確認發送截圖

def send_screenshot():
setup_send_msg()
touch(Template(r"tpl1656061157595.png", record_pos=(-0.028, 0.138), resolutinotallow=(959, 654)))
sleep(1)
swipe((300,400), (600,800), duratinotallow=0.8, steps=2)
keyevent("{ENTER}")

4.設計測試用例

GUI自動化測試並不適用於發現bug,更多的是將重覆性高的、簡單的手工操作場景轉換為自動操作,用於回歸測試,或是用於一些數據的構造模擬上。

將一些基本操作封裝為一個個函數以後,就可以進行組合、設計測試用例了,如:

① 場景一:發送不同類型的消息

分別調用以下函數:

  • 調用發送文本函數
  • 調用發送表情函數
  • 調用發送圖片函數
  • 調用發送截圖函數
  • ......

當然,以上各個函數也可以單獨作為一個個測試用例,從而用於回歸測試;

② 場景二:持續發送文本/圖片消息

將上述函數,加上迴圈,便可實現持續發送xx類型的消息;不過與其說是一條測試用例,倒不如說是為了模擬人工長時間操作運行下程式的穩定性,亦或是輔助其他特殊測試場景,比如:

  1. 去年我在測試移動端時、通過自動化模擬一端持續發送大量圖片消息,從而測試出【iOS移動端在弱網情況下接收大量離線文件消息程式會core掉】的bug。
  2. 今天在利用Airtest模擬持續發送文本消息、測試程式穩定性時,發現【單聊發送消息傳錯類型參數,發送給群聊,導致發送消息失敗,且無任何消息發送記錄】的bug,很奇怪,我手工發送的就沒任何問題,暫時還沒找到規律,研發還在定位中。雖然Airtest並沒有直接發現bug,但卻給發現bug創造了更多可能。

5.運行效果

6.查看測試報告

Airtest運行完成後會自動生成測試報告,通過控制台菜單欄的查看報告按鈕,即可自動在瀏覽器打開測試報告:

基於圖像識別框架Airtest的Windows項目自動化測試實踐_自動化測試_23

五、總結與思考

  • Airtest也可以用於pycharm編輯器下,需要手動提前安裝airtest庫:pip install -U airtest,安裝後即可新建airtest腳本,語法和在Airtest IDE中編寫時一致。另外,pycharm編輯器也可以直接打開airtest腳本;
  • 對於web、APP自動化主要用該端特定的自動化框架,如selenium、appium,而此類測試框架無法實現的Windows應用的操作,則可以藉助Airtest實現,從而打通端到端自動化測試流程;
  • 自動化測試編碼實現僅僅是自動化測試流程中一個小環節,更重要的是場景設計、用例實現以及如何發揮自動化測試的價值;
  • 自動化測試可能不會發現多少bug,但卻給發現bug創造了更多可能;

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 搭建lamp架構 1.LAMP架構介紹 所謂lamp,其實就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一組動態網站或者伺服器的開源軟體,除Linux外其它各部件本身都是各自獨立的程式,但是因為經常被放在一起使用,擁有了越來越高的相容度,共同組成了一個強 ...
  • Preparation debian11幾乎可以使用任何舊的電腦硬體,因為最小安裝的要求非常低。以下是最低要求和推薦要求: | 最低要求 | 推薦要求 | | | | | 存儲:10 Gigabytes記憶體:512 MegabytesCPU: 1 GigaHertz | 存儲:10 Gigabyt ...
  • 今天我們來瞭解有關Secret加密以及Configmapd配置介紹 一、Configmapd配置介紹 ConfigMap 功能在 Kubernetes1.2 版本中引入,許多應用程式會從配置文件、命令行參數或環境變數中讀取配置信息。ConfigMap API 給我們提供了向容器中註入配置信息的機制,... ...
  • 交叉編譯 交叉編譯是在一個平臺上生成另一個平臺上的可執行代碼。 同一個體繫結構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體繫結構上運行。 通常是自己的電腦寫好代碼編譯之後發到嵌入式設備或者盒子之類的去執行,或者另一個版本系統沒有的東西,例如opencv,從有的系統版本編譯到沒有的系統 ...
  • Mac圖片無損放大軟體哪款好用?Topaz Gigapixel AI for Mac是Mac平臺上一款圖片無損放大軟體,使用AI人工智慧來擴展圖像。topaz gigapixel AI為用戶提供無損放大的圖像,同時還增加了自然細節損失處理,可以放大和填充圖像調整產品,而不使圖片失真! 詳情:Topa ...
  • 好久沒寫博客了,最近挺忙的。近來有些好玩的實現,網上的資料並不是非常詳細,打算慢慢寫下來,希望別人能少走一點彎路。 因為希望提高ADC的採樣率,這次我試著實現了一下三重ADC交替採樣+DMA搬運至記憶體+TIM的TRGO觸發採樣(環境是stm32cubemx 6.5.0和keil 5) 首先打開cub ...
  • 喜歡音樂的朋友們想要快速進行音樂樂譜的學習麽?iReal Pro 是一款Mac上優秀的音樂學習和參考工具, 可以模擬出一支虛擬樂隊伴隨您練習,從30種不同風格的伴奏中選擇,包括50套練習曲,用於練習一般和弦進階,總之,iReal Pro是一款非常強大的音樂練習工具,音樂愛好者們一定要試試這款軟體。 ...
  • mobatek主要為電腦專業人士研究強大、安全且具有成本效益的軟體,主要產品包括:MobaXterm(適用於Windows的X伺服器和SSH客戶端)、MobaSSH(使用Unix工具為Windows增強的SSH伺服器)以及一些免費軟體......... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...