领取资料,咨询答疑,请➕wei: June__Go
上一小节我们学习了标记预期失败用例,本小节我们学习一下运行上次失败用例的方法。
pytest 执行完测试用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录上一次失败的用例和用例的 ids 等信息。在平时的自动化测试过程,测试用例较多时,当开发修复了问题后,为了节约测试时间,我们第二次执行脚本时,往往只需要执行上次执行失败的用例即可,具体的执行命令如下:
- --lf, --last-failed 只重新运行上次运行失败的用例(或如果没有失败的话会全部跑)。
- --ff, --failed-first 运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown)
如果只执行fail或error的用例,使用命令:pytest --lf 文件名.py
如果想先执行fail或error的用例,再执行其他通过的用例,使用命令:pytest -ff 文件名.py
示例:
# content of test_50.py
import pytest
@pytest.mark.parametrize("i", range(50))
def test_num(i):
if i in (17, 25):
pytest.fail("bad luck")
第一次运行结果:2个失败,48个通过
======================== 2 failed, 48 passed in 0.39s =========================
PASSED [ 2%]PASSED [ 4%]PASSED [ 6%]PASSED [ 8%]PASSED [ 10%]PASSED [ 12%]PASSED [ 14%]PASSED [ 16%]PASSED [ 18%]PASSED [ 20%]PASSED [ 22%]PASSED [ 24%]PASSED [ 26%]PASSED [ 28%]PASSED [ 30%]PASSED [ 32%]PASSED [ 34%]FAILED [ 36%]
test_demo.py:4 (test_num[17])
i = 17
@pytest.mark.parametrize("i", range(50))
def test_num(i):
if i in (17, 25):
> pytest.fail("bad luck")
E Failed: bad luck
test_demo.py:8: Failed
PASSED [ 38%]PASSED [ 40%]PASSED [ 42%]PASSED [ 44%]PASSED [ 46%]PASSED [ 48%]PASSED [ 50%]FAILED [ 52%]
test_demo.py:4 (test_num[25])
i = 25
@pytest.mark.parametrize("i", range(50))
def test_num(i):
if i in (17, 25):
> pytest.fail("bad luck")
E Failed: bad luck
test_demo.py:8: Failed
PASSED [ 54%]PASSED [ 56%]PASSED [ 58%]PASSED [ 60%]PASSED [ 62%]PASSED [ 64%]PASSED [ 66%]PASSED [ 68%]PASSED [ 70%]PASSED [ 72%]PASSED [ 74%]PASSED [ 76%]PASSED [ 78%]PASSED [ 80%]PASSED [ 82%]PASSED [ 84%]PASSED [ 86%]PASSED [ 88%]PASSED [ 90%]PASSED [ 92%]PASSED [ 94%]PASSED [ 96%]PASSED [ 98%]PASSED [100%]
Process finished with exit code 1
运行上次失败用例--lf/--last-failed
执行命令:pytest --lf
这样,pytest会检测上次运行时失败的测试用例,并只运行这些失败的用例,以便进行重新运行、调试或验证失败修复。
test_demo.py FF [100%]
=============================================================================================== FAILURES ===============================================================================================
_____________________________________________________________________________________________ test_num[17] _____________________________________________________________________________________________
i = 17
@pytest.mark.parametrize("i", range(50))
def test_num(i):
if i in (17, 25):
> pytest.fail("bad luck")
E Failed: bad luck
test_demo.py:8: Failed
_____________________________________________________________________________________________ test_num[25] _____________________________________________________________________________________________
i = 25
@pytest.mark.parametrize("i", range(50))
def test_num(i):
if i in (17, 25):
> pytest.fail("bad luck")
E Failed: bad luck
test_demo.py:8: Failed
======================================================================================= short test summary info ========================================================================================
FAILED test_demo.py::test_num[17] - Failed: bad luck
FAILED test_demo.py::test_num[25] - Failed: bad luck
========================================================================================== 2 failed in 0.25s ===========================================================================================
先运行上次失败用例再运行成功用例--ff/--failed-first
执行命令:pytest --ff
test_demo.py FF................................................ [100%]
=============================================================================================== FAILURES ===============================================================================================
_____________________________________________________________________________________________ test_num[17] _____________________________________________________________________________________________
i = 17
@pytest.mark.parametrize("i", range(50))
def test_num(i):
if i in (17, 25):
> pytest.fail("bad luck")
E Failed: bad luck
test_demo.py:8: Failed
_____________________________________________________________________________________________ test_num[25] _____________________________________________________________________________________________
i = 25
@pytest.mark.parametrize("i", range(50))
def test_num(i):
if i in (17, 25):
> pytest.fail("bad luck")
E Failed: bad luck
test_demo.py:8: Failed
======================================================================================= short test summary info ========================================================================================
FAILED test_demo.py::test_num[17] - Failed: bad luck
FAILED test_demo.py::test_num[25] - Failed: bad luck
===================================================================================== 2 failed, 48 passed in 0.44s =====================================================================================
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei: June__Go