Pytest提供了豐富的插件來擴充其功能,本章介紹下pytest-random-order插件,随機設定pytest測試用例的運作順序,并對随機性進行一些控制。
官方文檔: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-random-order運作
使用時無需導入,直接在pytest運作指令中添加參數即可。主要有以下參數:
- --random-order:随機化整個測試會話中所有測試用例的執行順序。預設包括所有的測試函數、方法和類。
- --random-order-bucket:設定重新排序的範圍,可以是class、module、package、global,parent, grandparent。前面四個比較好了解,剩下兩個parent和grandparent指的是用例的父節點和祖父節點(比如class内的用例父節點是class本身,子產品内的函數動用例父節點是子產品本身)。
- --random-order-seed:指定一個随機數,以確定每次使用該數字時擷取相同的随機順序。
以下是源碼中的三個參數的介紹資訊:
執行帶上參數--random-order
設計幾條用例如下圖:預期是所有用例執行順序會被打亂。
第1次執行結果:
第2次執行結果:
實際結果顯示每次執行順序都不太相同,跟預期相符。
執行帶上參數--random-order-bucket
設定兩個python檔案,裡面的用例同上。
1)帶上參數--random-order-bucket=module,執行時預期結果是每個檔案内的用例執行順序随機,檔案執行順序不變。
2)帶上參數--random-order-bucket=class,執行時預期結果是不同類中的用例随機。
3)帶上參數--random-order-bucket=package,執行時預期是整個目錄内的用例是随機的
4)帶上參數--random-order-bucket=parent,執行時預期是按用例父節點來随機執行用例順序。
舉例:我們在源碼中增加下列印條件,列印下父節點和祖父節點。
以參數--random-order-bucket=parent舉例,執行後結果如下:
class内的用例父節點是class本身,檔案的函數用例父節點是檔案本身,那麼依次類推檔案的父節點是上層檔案夾。
執行帶上參數--random-order-seed
同樣使用上面定義的測試用例
1)參數--random-order-seed=1000時,結果如下;
2)參數--random-order-seed=2000時,結果如下;
3)當我們再次使用--random-order-seed=1000時,重新執行結果如下:
結果顯示跟第1次執行時随機順序一緻。
共勉: 東漢·班固《漢書·枚乘傳》:“泰山之管穿石,單極之绠斷幹。水非石之鑽,索非木之鋸,漸靡使之然也。”
-----指水滴不斷地滴,可以滴穿石頭;
-----比喻堅持不懈,集細微的力量也能成就難能的功勞。
----感謝讀者的閱讀和學習,謝謝大家。
---祝願大家都能夠龍騰虎躍,步步高升!!!