前言
當我們將所有的自動化測試用例都編寫完成后,進行執行時,由於case較多,導致執行速度比較慢,那么有沒有什么辦法可以加快執行時間呢?有的人會說,可以用多進程,不錯,確實可以使用多進程,這里安靜介紹一個pytest的插件可以用來做分布式執行 pytest-xdist
pytest-xdist
pytest-xdist插件表示在測試過程中可以使我們的測試用例一起並行測試,運行情況是根據你運行環境存在多個CPU,運行過程中可以進行組合測試運行, 從而加快我們的測試時間。
官方地址:https://pypi.org/project/pytest-xdist/
安裝: pip install pytest-xdist
查看是否安裝成功: pip show pytest-xdist
當然如果使用pytest-xdist需要對編寫測試用例一些要求:
- 每一條用例必須保持獨立性。什么意思呢?就是每條用例不能互相影響其他的用例。
- 每一條用例沒有特定的執行順序,就是每條用例都要遵循隨機執行
- 每條用例的測試結果不能影響到其他的測試用例。
使用方法:
pytest -n x # n :表示 使用並行參數 # x:表示需要啟動多少個分布式
使用方法
安靜這里先簡單的寫一條用例,為了統一后續的時間,顯示出來我們的測試時間縮短,在每條用例下都強制等待了2秒
import pytest import time class TestCase: def test_01(self): time.sleep(2) print('---測試用例01---') def test_02(self): time.sleep(2) print('---測試用例02---') def test_03(self): time.sleep(2) print('---測試用例03---') def test_04(self): time.sleep(2) print('---測試用例04---') if __name__ == '__main__': pytest.main(['-vs'])
通過執行發現測試這4條case一共用了大概8.07秒
那么當我們使用pytest-xdist的方法進行執行看到這里啟動了2個並行分別是GW1和GW0。運行時間為5.07s相當於縮短了3秒鍾
這里安靜只是列舉了2個線程的參數,那么如果我想把我電腦最大的支持的cpu線程都用上怎么操作呢?
這里可以通過使用auto的參數進行,就是將啟動的線程數直接更改成auto
使用方法: pytest -vs -n auto
調試代碼
當我們在使用分布式方法的時候,分布式給我們提供了一個方法可以對其修改的代碼時,該方法會自動監聽你的代碼修改,如果你的代碼有錯誤,你修改之后保存,他便會自動再運行一遍測試,如果你運行后的結果沒有失敗或者錯誤,你可能需要手動停止測試。這個方法就是 --looponfail
這里安靜還是通過上面的代碼,我們在用例04中加入錯誤的斷言,然后加上參數--looponfail。 pytest -n 2 --looponfail
通過上述代碼直接發現,展示出來了我們錯誤的測試用例,已經最后顯示等待修改代碼,這里我們自行進行修改代碼。然后就會發現,自動執行了我們新修改的內容。當我們完成代碼后,可以自行退出。
好了,簡單的總結了如果在pytest中進行分布式執行,大大的降低了我們執行用例的測試時間。加快了我們的執行效率。