Airtest自動化多設備測試框架DreamMultiDevices

上期回顧:Airtest+Poco多設備併發自動化遊戲測試框架(遇到的問題)

編者注:
此框架作者寫於2020年,這2年Airtest更新了一些版本,不確定是否可以直接拿來使用,也許要稍微改些東西。但可以通讀代碼學習其思路。

DreamMultiDevices

基於Python/Airtest/Unittest的自動化多設備測試
https://github.com/saint228/DreamMultiDevices

3MB的效果動畫,只能放鏈接了:
https://github.com/saint228/DreamMultiDevices/blob/master/template/%E6%A1%86%E6%9E%B6.gif

1.須事先安裝如下環境:
python3.6以上、airtest、pocoui、BeautifulReport、unittest、xlwings(如果你想使用Excel儲存性能數據的話)。安裝方法:

pip install DreamMultiDevices

首先,非常重要的一點。先確認你電腦裏的adb環境!!!本框架使用airtest的adb作爲默認adb,目前該adb採用40版本,電腦裏其他應用如果使用adb且非該版本,會產生衝突。可以複製\Lib\site-packages\airtest\core\android\static\adb 目錄下的所有文件,替換掉本地的其他adb版本。

其次,python的安裝目錄不要有空格,類似 C:\Program Files\python 這樣的目錄因爲中間有空格,在執行adb命令時會報錯。如果不願意重裝python,可以手動修改框架代碼裏的各個ADB變量,爲其指定合理的路徑。

第一次運行前需要手動修改config.ini,裏面的包名和包路徑是必填項,也支持在運行過程中通過set方式修改。

madb.set_packagename("")#填待測apk的包名
madb.set_packagepath("")#填待測apk在硬盤上的絕對路徑
madb.set_TestCasePath("")#填本地測試用例目錄的絕對路徑

程序入口

from DreamMultiDevices.start import *

if __name__ == "__main__":
    start()

2./config.ini。整個項目的配置文件。

[config]
packName填寫待測試包名,str;
activityname 填寫測試包的入口類名,留空的話,Madb也會在需要時自動計算,可能會多花一點時間。
deviceslist填寫測試設備名,以逗號分隔,(PS:如不想使用配置,留空即可,則讀取當前所有已連接的設備)元組;
apkpath填寫待測試應用的安裝地址,須使用絕對路徑,str;
testcase填寫期望測試的用例id,須是一個int元組,RunTestCase函數會比對testcase元組與TestCase目錄下的TC_*.py文件,在元組內的用例纔會被測試;
needclickinstall和needclickstartapp 填寫True或False,設置是否需要安裝點擊或運行點擊,不爲True則不執行;
timeout_of_per_action填寫全局sleep時間,int;
timeout_of_startapp填寫安裝app等待時間,int(已廢棄);
iteration填寫權限腳本循環次數,int。

skip_pushapk2devices填寫“是否跳過pushapk2devices函數”的標誌,1爲True 0爲False,以下同。
auto_delete_package填寫“是否在安裝包過程中自動刪除設備裏的舊包”的標誌。
auto_install_package填寫“是否需要重新安裝新包”的標誌。
skip_check_of_install填寫“是否要跳過安裝過程中的自動輸入權限檢查部分”的標誌。
skip_check_of_startapp填寫“是否要跳過安裝過程中的自動輸入權限檢查部分”的標誌。
skip_performance填寫“是否要跳過性能監控部分”的標誌。
storage_by_excel填寫“是否使用excel存儲性能數據”的標誌,填1爲使用excel,填0爲使用json。

[TestCaseforDevice]
按設備配置執行用例,不填則默認全部

[Email]
mail_host 郵件host地址
mail_user 郵件賬戶名
mail_pass 郵件密碼
sender    郵件發件人
receivers 郵件收件人

 

3./start.py。可以使用pycharm運行,也可以被其他方法調用運行。

4./core/index index是整個框架的索引,負責根據devices分發進程,讓每個設備各自去運行enterprocess()函數。該函數裏進行設備的初始化,在確保初始化成功、安裝包成功的情況下,啓動待測試apk並調用RunTestCase函數,進行測試用例的分發。當needPerformance爲True時,還會同步運行enter_performance()函數,對設備進行性能監控並同步記錄在excel文件裏。

5./core/MultiADB Madb類,集成了各個與device有關的方法。

6./tools/PushApk2Devices 負責安裝apk到設備上,會先判斷待測包是否已存在,存在則刪除並重裝,重裝時會自動調用inputThread進行安裝權限的點擊。這裏的代碼需要用戶自行完成,具體寫法請參考inputThread裏已經提供的示範代碼。

7.MultiAdb.py裏的StartApp函數 。StartApp負責啓動apk,然後會進行應用開啓權限的點擊,此處代碼也需要用戶自行完成。

8./core/RunTestCase。RunTestCase是運行測試用例的分發函數,讀取之前配置表上的testcase元組並與TestCase目錄下的文件進行比對,一致的則列入測試範圍。

9./TestCase目錄。本目錄下放置所有的待測試用例。用例須以TC_開頭,用例採用標準的unittest格式。每條用例的執行結果會是一個suite對象,並在全部執行完以後,聚合到RunTestCase的report對象上。可以通過set_TestCasePath("")方法重置。

10./TestCast/TC_XXX.py 單個用例的執行文件,由用戶自行編寫,最後須符合unittest格式。特別要說明一點,BeautifulReport的默認截圖方法是異常時觸發語法糖截圖。使用時略有不便,我新增了GetScreen()函數,可以在任意需要時實時截圖,優先採用MiniCap方式截圖。

11./Report/Html報告。RunTestCase使用BeautifulReport庫進行報告輸出。會在調用文件所在的目錄生成一個Report目錄,輸出內容在Report目錄下,以設備名和時間命名,相關截圖則存儲在Report/Screen目錄下。

12.新增了Performance.py,用以處理adbdump抓取的性能數據,同時在tools目錄下新增了Excel.py。用來處理表格。限於adb的效率,大概4、5秒能抓一次,抓取時會同步截圖。劃重點:性能測試不支持模擬器,所有的手機模擬器都是x86架構,而99%的安卓手機都是arm架構,adb在不同的架構下抓取dump的返回值不同,所以我寫的adb抓性能的代碼在模擬器上運行會出錯。這不是bug,也不會修。(2019/8/13實現)

13.完成性能測試後,會在/Report目錄下重新生成xxx_PLUS.html的報告,是在BeautifulReport基礎上拼接了性能部分的頁面顯示。

[email protected]()裝飾器是用來限制每個用例執行時間上限的,因爲有時候碰到用例執行被block,佔用大量時間導致腳本運行不暢。掛了這個裝飾器以後,可以限定每個用例的最長時間,超時會拋異常並開始執行下個用例。

15.config.ini裏新加了2個字段:adb_log以及keywords。用來控制是否監聽adblog以及監聽的過濾字段。

---------------------------------------------------------------------------------

關注微信公衆號即可在手機上查閱,並可接收更多測試分享~

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