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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...