Pytest N次测试失败后停止测试套件
在一个真实的场景中,一旦一个新版本的代码准备部署,它首先被部署到pre-prod/staging环境。然后在其上运行一个测试套件。
只有当测试套件通过时,该代码才有资格部署到生产中。如果有测试失败,不管是一个还是多个,代码都不是生产准备。
因此,如果我们想在N个测试失败后立即停止测试套件的执行,该怎么办?这可以在pytest中使用maxfail来实现。
在n次测试失败后立即停止测试套件的执行,其语法如下
pytest --maxfail = <num>
创建一个文件test_failure.py,代码如下。
import pytest
import math
def test_sqrt_failure():
num = 25
assert math.sqrt(num) == 6
def test_square_failure():
num = 7
assert 7*7 == 40
def test_equality_failure():
assert 10 == 11
在执行这个测试文件时,所有的3个测试都会失败。在这里,我们将在一次失败后停止测试的执行,方法是 —
pytest test_failure.py -v --maxfail 1
test_failure.py::test_sqrt_failure FAILED
=================================== FAILURES
=================================== _______________________________________
test_sqrt_failure __________________________________________
def test_sqrt_failure():
num = 25
> assert math.sqrt(num) == 6
E assert 5.0 == 6
E + where 5.0 = <built-in function sqrt>(25)
E + where <built-in function sqrt>= math.sqrt
test_failure.py:6: AssertionError
=============================== 1 failed in 0.04 seconds
===============================
在上面的结果中,我们可以看到执行在一次失败中被停止。