天天看點

pytest測試架構pytest-random-order插件随機執行用例順序

作者:與科雷對話ing

Pytest提供了豐富的插件來擴充其功能,本章介紹下pytest-random-order插件,随機設定pytest測試用例的運作順序,并對随機性進行一些控制。

pytest測試架構pytest-random-order插件随機執行用例順序

官方文檔:https://pytest-cov.readthedocs.io/en/latest/index.html

适配版本說明:

python >= 3.5

pytest-random-order安裝

使用pip指令安裝: pip install pytest-random-order (安裝在pytest工程所運作的python環境,python的安裝目錄或者虛拟環境目錄,可以參考之前文章檢視運作環境pycharm配置pytest運作環境)

通過pycharm安裝:打開設定,按照如下圖中安裝插件(windows系統)

pytest測試架構pytest-random-order插件随機執行用例順序

pytest-random-order運作

使用時無需導入,直接在pytest運作指令中添加參數即可。主要有以下參數:

  • --random-order:随機化整個測試會話中所有測試用例的執行順序。預設包括所有的測試函數、方法和類。
  • --random-order-bucket:設定重新排序的範圍,可以是class、module、package、global,parent, grandparent。前面四個比較好了解,剩下兩個parent和grandparent指的是用例的父節點和祖父節點(比如class内的用例父節點是class本身,子產品内的函數動用例父節點是子產品本身)。
  • --random-order-seed:指定一個随機數,以確定每次使用該數字時擷取相同的随機順序。

以下是源碼中的三個參數的介紹資訊:

pytest測試架構pytest-random-order插件随機執行用例順序

執行帶上參數--random-order

設計幾條用例如下圖:預期是所有用例執行順序會被打亂。

pytest測試架構pytest-random-order插件随機執行用例順序

第1次執行結果:

pytest測試架構pytest-random-order插件随機執行用例順序

第2次執行結果:

pytest測試架構pytest-random-order插件随機執行用例順序

實際結果顯示每次執行順序都不太相同,跟預期相符。

執行帶上參數--random-order-bucket

設定兩個python檔案,裡面的用例同上。

1)帶上參數--random-order-bucket=module,執行時預期結果是每個檔案内的用例執行順序随機,檔案執行順序不變。

pytest測試架構pytest-random-order插件随機執行用例順序

2)帶上參數--random-order-bucket=class,執行時預期結果是不同類中的用例随機。

pytest測試架構pytest-random-order插件随機執行用例順序

3)帶上參數--random-order-bucket=package,執行時預期是整個目錄内的用例是随機的

pytest測試架構pytest-random-order插件随機執行用例順序

4)帶上參數--random-order-bucket=parent,執行時預期是按用例父節點來随機執行用例順序。

舉例:我們在源碼中增加下列印條件,列印下父節點和祖父節點。

pytest測試架構pytest-random-order插件随機執行用例順序

以參數--random-order-bucket=parent舉例,執行後結果如下:

class内的用例父節點是class本身,檔案的函數用例父節點是檔案本身,那麼依次類推檔案的父節點是上層檔案夾。

pytest測試架構pytest-random-order插件随機執行用例順序

執行帶上參數--random-order-seed

同樣使用上面定義的測試用例

1)參數--random-order-seed=1000時,結果如下;

pytest測試架構pytest-random-order插件随機執行用例順序

2)參數--random-order-seed=2000時,結果如下;

pytest測試架構pytest-random-order插件随機執行用例順序

3)當我們再次使用--random-order-seed=1000時,重新執行結果如下:

pytest測試架構pytest-random-order插件随機執行用例順序

結果顯示跟第1次執行時随機順序一緻。

共勉: 東漢·班固《漢書·枚乘傳》:“泰山之管穿石,單極之绠斷幹。水非石之鑽,索非木之鋸,漸靡使之然也。”

-----指水滴不斷地滴,可以滴穿石頭;

-----比喻堅持不懈,集細微的力量也能成就難能的功勞。

----感謝讀者的閱讀和學習,謝謝大家。

---祝願大家都能夠龍騰虎躍,步步高升!!!