简单的校验assert,虽然能够写多个assertcss
def test_add1(self): assert add(2,3)==5 assert add(1,3)==3 assert add(2,5)==7
因为第二个断言失败,那么下面的断言就不会执行。
因此若是须要多个断言,都执行就须要第三方插件 pytest-assume
安装命令:java
pip install pytest-assume
示例:python
def test_add2(self): pytest.assume(add(1,2)==3) pytest.assume(add(1,4)==3) pytest.assume(add(2,2)==4)
这边即便第二个断言失败了,第三个断言仍是会继续执行。app
对于一些上下文依赖的,有时候可能须要设定一些特定执行顺序,pytest的ordering插件,就很好的解决了这个问题
安装命令dom
pip install pytest-ordering
示例脚本以下:ui
def test_order1(): print ("first test") assert True def test_order2(): print ("second test") assert True
没有加上ordering,执行顺序是 test_order1----test_order2,如图:spa
加上顺序以后插件
@pytest.mark.run(order=2) def test_order1(): print ("first test") assert True @pytest.mark.run(order=1) def test_order2(): print ("second test") assert True
结果以下:命令行
失败用例重跑,我的以为这个是很是实用的插件。
举个例子:
在作UI自动化,如selenuim或者appium时,遇到某些元素未能及时显示,致使点击失败,若是加上重跑,那么将有效提升报告的准确性。
安装命令:code
pip install pytest-rerunfailures
示例脚本
class TestRerun(): @pytest.mark.run(order=2) @pytest.mark.flaky(reruns=5) def test_random(self): print(1) pytest.assume((random.randint(0,4)+3)==5) @pytest.mark.run(order=3) def test_random2(self): ''' 不加mark 命令行中 pytest -sq demo_rerun.py --reruns 5 :return: ''' print(2) pytest.assume((random.randint(0,4)+3)==5) @pytest.mark.run(order=1) @pytest.mark.flaky(reruns=6, reruns_delay=2) def test_example(self): print(3) assert random.choice([True, False])
执行命令:
pytest -sq demo_rerun.py --reruns 5 pytest -sq demo_rerun.py --reruns 5 --reruns-delay 1
两者的区别是,下面在每次重跑以前会等待 1 s
同时也能够在脚本中指定定义重跑的次数,这个时候在运行的时候,就无需加上 --reruns 这个参数
@pytest.mark.flaky(reruns=6, reruns_delay=2) def test_example(self): print(3) assert random.choice([True, False])
对比能够看出,执行顺序发生了变化