pytest框架插件(用例依賴、多重校驗、執行順序、失敗重跑、重復執行、標記)


參考來源:https://www.jianshu.com/p/7df6d781f100

pytest插件匯總:http://plugincompat.herokuapp.com/

以下是常用插件介紹

1、用例依賴:pytest-dependency

  官方示例:https://pytest-dependency.readthedocs.io/en/latest/usage.html#basic-usage

import pytest

#在類下面實現依賴關系,第一種方式
class TestClass(object):

    @pytest.mark.dependency()
    # @pytest.mark.xfail(reason="deliberate fail")
    def test_a(self):
        assert True

    @pytest.mark.dependency()
    def test_b(self):
        pass

    @pytest.mark.dependency(depends=["TestClass::test_a"])
    def test_c(self):
        pass

    @pytest.mark.dependency(depends=["TestClass::test_b"])
    def test_d(self):
        pass

    @pytest.mark.dependency(depends=["TestClass::test_b", "TestClass::test_c"])
    def test_e(self):
        pass

#在類下面實現依賴關系,第二種方式
class TestClassNamed(object):

    @pytest.mark.dependency(name="a")
    #@pytest.mark.xfail(reason="deliberate fail")
    def test_a(self):
        assert False

    @pytest.mark.dependency(name="b", depends=["a"])
    def test_b(self):
        pass

    @pytest.mark.dependency(name="c")
    def test_c(self):
        pass

    @pytest.mark.dependency(name="d", depends=["c"])
    def test_d(self):
        pass

    @pytest.mark.dependency(name="e", depends=["b", "c"])
    def test_e(self):
        pass
#不在類下面,第一種
import pytest

@pytest.mark.dependency()
@pytest.mark.xfail(reason="deliberate fail")
def test_a():
    assert False

@pytest.mark.dependency()
def test_b():
    pass

@pytest.mark.dependency(depends=["test_a"])
def test_c():
    pass

@pytest.mark.dependency(depends=["test_b"])
def test_d():
    pass

@pytest.mark.dependency(depends=["test_b", "test_c"])
def test_e():
    pass

#不在類下面,第二種    
import pytest

@pytest.mark.dependency(name="a")
@pytest.mark.xfail(reason="deliberate fail")
def test_a():
    assert False

@pytest.mark.dependency(name="b")
def test_b():
    pass

@pytest.mark.dependency(name="c", depends=["a"])
def test_c():
    pass

@pytest.mark.dependency(name="d", depends=["b"])
def test_d():
    pass

@pytest.mark.dependency(name="e", depends=["b", "c"])
def test_e():
    pass

2、多重校驗:pytest-assume

    def test_a(self):
        pytest.assume(3 == 3)
        pytest.assume(5 == 3)
        pytest.assume(4 == 5)

即使第二個斷言失敗了,第三個斷言還是會繼續執行

3、執行順序:pytest-ordering(還可以對類進行標記,盡量但不要混着用)

#先執行test_b再執行test_a
@pytest.mark.run(order=2)
def test_a(self):
    pass
    
@pytest.mark.run(order=1)
def test_b(self):
    pass

4、失敗重跑:pytest-rerunfailures(還可以對類進行標記,盡量但不要混着用

    #reruns是重跑次數,reruns_delay是間隔時間
    @pytest.mark.flaky(reruns=6, reruns_delay=2)
    def test_a(self):
        pass

5、重復執行:pytest-repeat

<1>對整個文件的測試用例重復執行:pytest -v  test_case.py  --count=5

<2>直接標記某個用例執行多少次(還可以對類進行標記,盡量不要混着用):@pytest.mark.repeat(2)

實際發現重復執行的用例(斷言是True),作為其他用例的依賴時,會導致其他用例跳過

用例在統計的時候會把重復執行的次數計算進去

6、標記

參考來源有更多詳細的用法https://www.cnblogs.com/lixy-88428977/p/9697881.html

示例是對單個用例的標記,還可以對類進行標記

'''
命令行執行:pytest -v -m "ios" ,則只會運行標記為ios的用例
命令行執行:pytest -v -m "not ios" ,則會運行沒有標記ios的用例
'''
    @pytest.mark.ios
    def test_c(self):
        pass

    @pytest.mark.android
    def test_d(self):
        pass


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM