前言
上一篇文章我們講了在pytest中測試用例的命名規則,那麼在pytest中又是以怎樣的順序執行測試用例的呢?
在unittest框架中,預設按照ACSII碼的順序載入測試用例並執行,順序為:09、AZ、a~z,測試目錄、測試模組、測試類、測試方法/測試函式都按照這個規則來載入測試用例。
而 pytest 中的用例執行順序與unittest 是不一樣的,pytest有預設的執行順序,還可以自定義執行順序。
pytest 預設執行順序
-
測試目錄、測試模組,按照排序順序執行
執行順序如下:
-
同一測試模組下的執行順序
import pytest class TestOrder: def test_e(self): print("test_e") def test_4(self): print("test_4") def test_b(): print("test_a") def test_a(): print("test_a") def test_2(): print("test_2") def test_1(): print("test_1") if __name__ == '__main__': pytest.main()
執行順序如下:
自定義執行順序
pytest 框架支援自定義測試用例的執行順序,需要安裝pytest-ordering
外掛。
安裝
pip install pytest-ordering
使用
需要使用 @pytest.mark.run(),程式碼如下:
import pytest
class TestOrder:
def test_e(self):
print("test_e")
def test_4(self):
print("test_4")
def test_b():
print("test_a")
@pytest.mark.run(order=2)
def test_a():
print("test_a")
@pytest.mark.run(order=1)
def test_2():
print("test_2")
def test_1():
print("test_1")
if __name__ == '__main__':
pytest.main()
執行順序如下:
在測試模組中,先執行被@pytest.mark.run() 標記的測試方法/測試函式,再按預設順序執行其他的。
總結
雖然 pytest 可以自定義測試用例執行順序,但是實際測試用例設計的過程中,不應該讓用例的執行有先後順序,即任意單獨的測試用例都是獨立的完整的功能點的校驗,不對其他用例有依賴。