pytest教程-17-运行上次失败的用例

领取资料,咨询答疑,请➕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

引用: pytest -s -v [demo.py](http://demo.py) --workers 1 --tests-per-worker 4。 引用: 利用pytest-parallel:1进程4线程运行 pytest -s -v demo.py --workers 1 --tests-per-worker 4。 引用: 发现新问题 当前版本的 pytest-parallel 和pytest-xdist 在python3.9上不兼容。 根据引用和引用,可以看出这是在使用pytest执行测试用例的命令。其中,`-s`参数表示输出详细日志信息,`-v`参数表示输出详细的测试结果信息,`--workers 1`参数表示使用一个进程来运行测试用例,`--tests-per-worker 4`参数表示每个进程运行4个测试用例。 然而,根据引用提到的问题,当前版本的pytest-parallel和pytest-xdist在Python 3.9上不兼容。这可能意味着在Python 3.9上无法使用`pytest-parallel`来实现多线程运行测试用例的功能。 至于`--=no`部分,根据提供的引用内容中没有相关信息,无法给出具体解释。请提供更多上下文或引用内容以获得更准确的回答。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [win-python-pytest(pytest-parallel/pytest-xdist)自动化测试多线程的验证](https://blog.csdn.net/Franciz777/article/details/120976872)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值