pytest(4)-測試用例執行順序

給你一頁白紙發表於2022-02-14

前言

上一篇文章我們講了在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 可以自定義測試用例執行順序,但是實際測試用例設計的過程中,不應該讓用例的執行有先後順序,即任意單獨的測試用例都是獨立的完整的功能點的校驗,不對其他用例有依賴。

相關文章