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
  • 前言 JSON Web Token(JWT)是一個非常輕巧的規範。這個規範允許我們使用 JWT 在用戶和伺服器之間傳遞安全可靠的信息。一個 JWT 實際上就是一個字元串,它由三部分組成,頭部、載荷與簽名。前兩部分需要經過 Base64 編碼,後一部分通過前兩部分 Base64 編碼後再加密而成。針對 ...
  • 一:背景 1. 講故事 今天本來想寫一篇 非托管泄露 的生產事故分析,但想著昨天就上了一篇非托管文章,連著寫也沒什麼意思,換個口味吧,剛好前些天有位朋友也找到我,說他們的拍攝監控軟體卡死了,讓我幫忙分析下為什麼會卡死,聽到這種軟體,讓我不禁想起了前些天 在程式員桌子上安裝監控 的新聞,參考如下: 我 ...
  • 文章目錄 介紹 ABP的依賴註入系統是基於Microsoft的依賴註入擴展庫(Microsoft.Extensions.DependencyInjection nuget包)開發的。所以我們採用dotnet自帶的註入方式也是支持的。 由於ABP是一個模塊化框架,因此每個模塊都定義它自己的服務併在它自 ...
  • 前言 外觀模式,英文名稱是:Facade Pattern。我們先從名字上來理解一下“外觀模式”。我看到了“外觀”這個詞語,就想到了“外表”這個詞語,兩者有著很相近的意思。就拿談戀愛來說,“外表”很重要,如果第一眼看著很舒服、有眼緣,那就有交往下去的可能。如果長的“三寸釘、枯樹皮”,估計就夠嗆了。在這 ...
  • 模擬.NET實際應用場景,綜合應用三個主要知識點:一是使用dnSpy反編譯第三庫及調試,二是使用Lib.Harmony庫實現第三庫攔截、偽造,三是實現同一個庫支持多版本同時引用。 ...
  • 通過strimzi部署的kafka集群,如何部署prometheus+grafana去監控呢?官方文檔信息量太大,即便照著做也可能失敗,這裡有一份詳細的保姆級操作指南,助您成功部署監控服務 ...
  • 在工具類中封裝getBean,使用哪個介面來實現 實事上,在工具類中,實現BeanFactoryPostProcessor和ApplicationContextAware介面後,使用它們構造方法里的對象ConfigurableListableBeanFactory和ApplicationContex ...
  • 1章:系統基礎信息模塊詳解 通過第三方模塊獲取伺服器的基本性能、塊設備、網卡介面、網路地址庫等信息。 1.1 系統性能模塊psutil:獲取系統性能信息、記憶體信息、磁碟信息、網路信息、用戶信息等。 1.2 IP地址處理模塊IPy: 處理IP地址,網段等。 1.3 DNS處理模塊dnspython: ...
  • EasyExcel動態表頭導出(支持多級表頭) 在很多業務場景中,都會應用到動態表頭的導出,也會涉及到多級表頭的導出,如下圖所示 通過EasyExcel,我們可以快速實現這一需求,具體代碼如下 DynamicHeader import java.util.List; /** *@Author: <a ...
  • 基於java線上婚紗定製系統設計與實現,可適用於線上婚紗攝影預定系統,基於web的婚紗影樓管理系統設計,基於web的婚紗影樓管理系統設計,婚紗攝影網系統,婚紗攝影網站系統,婚紗攝影網站系統,婚紗系統,婚紗管理系統等等; ...