寫在前面
上一篇分享了《基於Sikuli GUI影象識別框架的PC使用者端自動化測試實踐》,但sikuli看起來怎麼都像是上個世紀的介面風格,且功能過於簡陋。而同樣基於影象識別框架的Airtest,則無疑強大了許多,本次分享的內容是基於Airtest實現Windows應用的自動化測試,內容大綱:
Airtest是網易出品的一款基於影象識別和Poco控制元件識別的一款UI自動化測試工具。這個框架設計來源於新穎的圖形指令碼語言Sikuli,關於Sikuli框架可見上一篇分享《基於Sikuli GUI影象識別框架的PC使用者端自動化測試實踐》。和Sikuli框架的原理一樣,使用者不需要一行行的去寫程式碼,而是用螢幕截圖的方式,用截出來的圖形擺列組合成神器的程式,這是Airtest的一部分。另外,Airtest也可以基於poco這個UI控制元件搜尋方塊架,通過控制元件的名稱、id之類的來定位目標控制元件,原理類似於 appium。官網:http://airtest.netease.com/
相比於其他的自動化測試框架,Airtest主要有如下兩個優勢:
官方檔案:https://airtest.doc.io.netease.com/IDEdocs/getting_started/AirtestIDE_install/
由於Airtest框架是基於python語言開發,本地需要搭建python相關環境,建議使用python3
Python 下載地址:https://www.python.org/downloads/
AirtestIDE使用者端下載:http://airtest.netease.com
Windows系統使用者在官網上下載對應32位元或是64位元版本的zip包,解壓後得到AirtestIDE資料夾,雙擊AirtestIDE/AirtestIDE.exe即可啟動
Airtest執行完成後,會自動生成一份報告,通過下圖按鈕可以檢視,點選後會自動啟動瀏覽器檢視報告
Airtest IDE中右鍵,即可兩種模式相互切換
切換後的效果如下:
連線Windows應用有三種方法,分別是:
裝置窗-Windows視窗連線-搜尋視窗,選擇視窗後,點選連線
(由於控制程式碼容易發生變化,因此不推薦此連線方式):下圖的67330即為企業微信的控制程式碼
if not cli_setup: auto_setup(__file__, logdir=True, devices=["Windows:///?title_re=.*閱雲*"])
官方檔案: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
先看下待測試的windows應用的頁面佈局:
# -*- encoding=utf8 -*- __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=.*閱雲*"])
操作步驟為:進入聊天視窗>輸入文字內容>傳送
def send_text(time): setup_send_msg() # 進入聊天視窗 for i in range(time): text("這是AIRTEST傳送的第%s條訊息"%str(i)) # 輸入文字訊息內容 keyevent("{ENTER}") # 按下鍵盤Enter鍵,要大寫 keyevent("{ENTER}") # 第一遍按下Enter是防止此時的輸入法為中文,第二遍按下Enter是傳送
操作步驟為:進入聊天視窗>點選截圖按鈕>滑動滑鼠拉取截圖區域>確認傳送截圖
def send_screenshot(): setup_send_msg() touch(Template(r"tpl1656061157595.png", record_pos=(-0.028, 0.138), resolution=(959, 654))) sleep(1) swipe((300,400), (600,800), duration=0.8, steps=2) keyevent("{ENTER}")
GUI自動化測試並不適用於發現bug,更多的是將重複性高的、簡單的手工操作場景轉換為自動操作,用於迴歸測試,或是用於一些資料的構造模擬上。
將一些基本操作封裝為一個個函數以後,就可以進行組合、設計測試用例了,如:
分別呼叫以下函數:
當然,以上各個函數也可以單獨作為一個個測試用例,從而用於迴歸測試;
將上述函數,加上回圈,便可實現持續傳送xx型別的訊息;不過與其說是一條測試用例,倒不如說是為了模擬人工長時間操作執行下程式的穩定性,亦或是輔助其他特殊測試場景,比如:
Airtest執行完成後會自動生成測試報告,通過控制檯選單欄的檢視報告按鈕,即可自動在瀏覽器開啟測試報告: