微信小程序自動化測試 持續集成實踐

小程序端的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

以下是UI自動化測試Demo項目的目錄結構:

對各個文件或目錄的說明如下:

  • *.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 持續集成

  1. 新增任務節點,專門用來運行 Airtest Project 腳本,注意設置節點的Labels 和 Usage ,確保節點的專一性;


  2. 新建項目,需要注意以下幾處配置:

    • 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一致,具體如下圖:
  1. 配置 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 服務掛掉或者節點數<閾值時,都會推送告警郵件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章