小程序端的GUI測試選擇 網易 Airtest Project 作爲測試框架, 它基於Airtest 圖像識別和 Poco 控件識別 ,腳本基於Python3,具有跨平臺、安裝配置簡單、控件識別方便、易上手等優點。整體的技術選型如下所示:
ID | Platfrom | Intro | Version/Tag |
---|---|---|---|
1 | Airtest | Python第三方庫,用於Android/iOS/Windows遊戲及應用的UI測試自動化測試 | 1.1.1 |
2 | PocoUI | Python第三方庫,基於Poco實現的跨引擎UI自動化測試框架 | 1.0.78 |
3 | Jenkins | 持續集成平臺 | - |
4 | Nginx | 用於搭建靜態資源服務器 | - |
5 | AirtestIDE | 由網易開發維護的跨平臺自動化測試工具 | 1.2.2 |
6 | Gitlab | Git web服務器 | - |
7 | jinja2 | Python模板引擎 | 2.8 |
對各個文件或目錄的說明如下:
-
*.air/
此類目錄都是測試腳本,裏面會包含*.py
文件以及腳本中使用到的截圖文件; -
config.csv
用於配置篩選本次需要運行的腳本,每次批量運行腳本時,都會先讀取其內容,若Label配置爲"Y",則代表可以運行;
-
clear_useless_pics.py
通過命令行運行,將會遍歷當前目錄下所有的*.air
目錄,並清除腳本中未使用到的截圖文件; -
mc_launcher.py
Demo項目中用到的自定義啓動器方法,具體內容以下會有進一步介紹; -
summary_temp.html
自定義聚合報告模板文件,基於 Jinja2; -
requirements.txt
項目依賴關係清單,運行命令pip install -r requirements.txt
來安裝本項目所依賴的包;
AirtestIDE基礎使用
主要內容:開發環境準備、腳本調試、使用命令行運行腳本。
Airtest Project 自定義啓動器批量運行腳本
主要內容:自定義啓動器源碼
解決運行Airtest腳本時opencv-contrib-python報錯的問題
主要內容:解決Win10命令行下使用Airtest自定義的啓動器運行腳本時,遇到的各種問題;
Airtest Project + Jenkins 持續集成
-
新增任務節點,專門用來運行 Airtest Project 腳本,注意設置節點的Labels 和 Usage ,確保節點的專一性;
-
新建項目,需要注意以下幾處配置:
- General 勾選 Restrict where this project can be run ,Label Expression 設置爲剛新增節點的Label;
- Build Environment 勾選 Abort the build if it's stuck ,根據本地腳本實際運行時長設置 Timeout minutes , Time-out actions 設置Fail the build,防止構建堵塞;
由於Airtest Project 還沒有現成的Jenkins插件,導致即使腳本報錯也無法反饋給Jenkins。這裏的解決方法是在Post-build Actions添加Groovy Postbuild , Groovy Script 內容如下:
if(manager.logContains(".*(ERROR: runTest|Traceback).*")) {
manager.buildFailure()
}
通過檢查Jenkins Console的輸出內容中是否包含指定的字符串,如果包含的話就將本次任務狀態置爲失敗。
- 郵件通知 Editable Email Notification
觸發郵件通知時,會將生成的 summary.html 作爲附件發送,但在 Jenkins Editable Email Notification 設置附件時有限制,只能輸入工作空間的相對路徑,輸入絕對路徑會報錯,這裏目前採取的方法是設置Jenkins項目工作空間和Nginx中配置的測試報告location一致,具體如下圖:
-
配置 Jenkins Workspace 和節點機環境變量
在自定義的啓動器中,單個業務模塊生成測試報告時,指定了export_dir和static_root參數,這兩個參數的值都是從節點機的環境變量中讀取的。
# 測試報告相關資源打包後的導出路徑,目錄不存在會自動創建
AIRTEST_EXPORT_DIR = os.getenv('AIRTEST_EXPORT_DIR')
# 靜態資源文件服務器 格式:Scheme://IP:Port
AUTOLINE_HOST = os.getenv('AUTOLINE_HOST')
Zabbix 監控 Jenkins Online Node 進行郵件報警
目前Jenkins正在使用的節點有多個,爲了防止節點機器掛掉而無法及時獲知,所以使用Zabbix 對 Jenkins節點數進行監控,當Jenkins 服務掛掉或者節點數<閾值時,都會推送告警郵件。