【PyUnit】一、如何讓測試用例按序執行

  • 2019 年 10 月 4 日
  • 筆記

PyUnit(unittest) 是 Python 自帶的單元測試框架,用於編寫和運行可重複的測試。PyUnit 是 xUnit 體系的一個成員,xUnit 是眾多測試框架的總稱,PyUnit 主要用於進行白盒測試和回歸測試。

PyUnit 具有如下好處:

  • 可以使測試程式碼與產品程式碼分離。
  • 針對某一個類的測試程式碼只需要進行較少的改動,便可以應用於另一個類的測試。
  • PyUnit 開放源程式碼,可以進行二次開發,方便對 PyUnit 的擴展。

PyUnit具有如下特徵:

  • 使用斷言方法判斷期望值和實際值的差異,返回 bool 值。
  • 測試驅動設備可使用共同的初始化變數或實例。
  • 測試包結構便於組織和集成運行。

對於unittest框架的使用,建議參考詳細的官方文檔,本文主要分享在使用unittest過程中,測試用例執行順序問題及擴展問題。

本期以三種unittest自帶的方法為例,下期詳述擴展示例。

unittest中的執行順序

測試用例編寫之後運行,發現執行順序並不是按照我們編寫的順序/位置來執行,許多前後有關聯的測試用例在這種情況下就沒有辦法保證其執行的順序性,因此使得有前後關聯的測試用例執行失敗。例:下圖打開微信/支付寶和關閉微信/支付寶是相關聯的case,因為沒有按照順序執行,導致兩個關閉的case失敗。

在unittest中,loader.py的loadTestsFromTestCase方法裡邊,調用了getTestCaseNames方法來獲取測試用例的名稱,使用functools.cmp_to_key的方法對測試用例進行排序,如下圖:

該方法默認是根據ASCII碼的順序載入測試用例,數字與字母的順序為:0-9,A-Z,a-z。

基於unittest的機制,如何控制用例執行順序呢?

查閱相關資料主要有如下幾種方法。

通過TestSuite添加

通過TestSuite類的addTest方法,按順序載入測試用例,如下圖:

手動修改函數名稱

在命名時,對函數名稱進行編號,test後緊跟數字編號,根據ASCII碼排序保證順序執行,示例如下圖:

通過TestLoader添加

通過TestSuite類的addTest方法,按順序載入測試用例,如下圖:

該方法可以同時測試多個類,並且同TestSuite方法相類似,該方法的執行需要對層級進行編號,以按照特定順序執行。

從如上三種方法可以看出,人工排序不可避免,程式碼繁瑣、不好維護,那如何在不修改每條case,不手動添加程式碼的情況下,讓測試用例按照編寫的順序依次執行呢?關注公眾號,下期將分享通過excel和其他擴展方法,實現測試用例順序執行方法。