Pytest框架 之【用例執行順序】
阿新 • • 發佈:2022-05-31
今天在使用pytest執行用例過程中,使用了debug除錯程式碼時,偶然發現,執行用例時不是自上而下的,pytest 中的用例執行順序與unittest 是不一樣的,pytest有預設的執行順序,還可以自定義執行順序。而在unittest框架中,預設按照ACSII碼的順序載入測試用例並執行,順序為:0~9、A~Z、a~z,測試目錄、測試模組、測試類、測試方法/測試函式都按照這個規則來載入測試用例。
pytest預設執行順序
- 測試目錄--->測試模組,按照排序執行:
執行順序如下:
同一測試模組下的執行順序
import pytest class TestOrder:def test_e(self): print("test_e") def test_4(self): print("test_4") def test_b(self): print("test_b") def test_a(self): print("test_a") def test_2(self): print("test_2") def test_1(self): print("test_1") if __name__ == '__main__': pytest.main(['stu.py','-s'])
執行結果:
stu.py test_e
.test_4
.test_b
.test_a
.test_2
.test_1
.
我們可以看出預設是自上而下依次執行的,如若遇到測試用例名稱過長,也會根據字母的排序順序執行,如下的程式碼執行時,就不會是自上而下,而是根據user_後邊的第一個字母l、r的排列順序執行的:
class Demo: def test_user_register(self): '''正向·註冊''' print('=======test_user_register============') def test_user_login(self): '''登入''' print('=======test_user_login========') if __name__ == '__main__': pytest.main(['test_sky.py', '-vs'])
執行結果:
test_sky.py::SkyApiTest::test_user_login
test_sky.py::SkyApiTest::test_user_register
自定義執行順序
——使用pytest-ordering,pytest的一個外掛,可以控制用例的執行順序。
安裝:
pip install pytest-ordering
原始碼:https://github.com/ftobia/pytest-ordering
需要搭配@pytest.mark.run() 使用:
class Test01(): def test_02(self): print('\n---用例02---') @pytest.mark.run(order=2) def test_01(self): print('\n---用例01---') @pytest.mark.run(order=1) def test_03(self): print('\n---用例03---') def test_04(self): print('\n---用例04---') if __name__ == '__main__': pytest.main(['stu.py', '-s'])
執行結果:
stu.py ---用例03--- . ---用例01--- . ---用例02--- . ---用例04--- .
通過【執行結果】可以看出來,用例已經按照我們的要求,先執行用例3,在執行用例1,最後執行用例2的方法來的,這裡需要注意的是,如果你在那個用例上面沒有新增執行順序要求的話,他會先執行帶有標記的用例,然後根據未標記的用例順序進行執行。
雖然 pytest 可以自定義測試用例執行順序,但是實際測試用例設計的過程中,不應該讓用例的執行有先後順序,即任意單獨的測試用例都是獨立的完整的功能點的校驗,不對其他用例有依賴。