參考來源: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
