Pytest框架中,如何实现德不孤的预期失败测试案例?

2026-05-22 15:222阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1413个文字,预计阅读时间需要6分钟。

Pytest框架中,如何实现德不孤的预期失败测试案例?

目录 + 1、@pytest.mark.xfail() 标记的作用 + 2、应用场景 + 3、语法参数说明 + 4、示例 + 5、忽略xfail标记 + Pytest预期失败需使用 @pytest.mark.xfail() 标记。

1、@pytest.mark.xfail() 标记的作用

期望测试失败,但实际执行时应该通过测试。

2、应用场景

测试新功能或修复旧功能时,暂时无法确保测试用例完全通过,但期望在未来修复。

3、语法参数说明

@pytest.mark.xfail()

4、示例

pythondef test_example(): assert 1==2, 预期失败

5、忽略xfail标记

当使用 `pytest.mark.xfail` 标记的测试用例通过时,可以使用 `-x` 或 `--strict` 选项忽略该标记。

Pytest框架中,如何实现德不孤的预期失败测试案例?

目录
  • 1、@pytest.mark.xfail()标记的作用
  • 2、应用场景
  • 3、语法参数说明
  • 4、示例
  • 5、忽略xfail标识

Pytest预期失败需要使用@pytest.mark.xfail()标记。

1、@pytest.mark.xfail()标记的作用

期望测试用例是失败的,但是会运行此测试用例,并且也不会影响其他测试用例的的执行。(即xfail标记并不会影响用例的运行)

如果预期失败的测试用例执行失败的则结果是xfail(不会额外显示出错误信息)

如果测试用例执行成功的则结果是xpass

在报告中会将这些用例列在“预期失败XFAIL或意外传递XPASS部分。

2、应用场景
  1. 你期望测试由于某种原因失败。
    如:用例功能不完善,或者用例执行一直失败。
  2. 对尚未实现的功能进行测试时。
  3. 尚未修复的错误进行测试时。
3、语法参数说明

如下所示:

@pytest.mark.xfail(self,condition=None, reason=None, raises=None, run=True, strict=False)

  • condition: 如果满足条件则标记用例执行失败, 默认为True
    说明:condition表示预期结果,然后用例实际执行的结果,与预期结果对比,会出现4种测试结果状态。
    failed, passed, xfailed, xpassed
    提示:condition可以等于True或者False,也可以等于一个表达式,如:condition=1>2等。
  • reason:说明用例标记为预期失败的原因, 默认为None。(必填)
  • raises=None:在raises参数中指定单个异常或异常组,表明期望用例抛出这些异常。
    如果用例失败不是因为这些异常,那用例会被标记为failed
    如果测试用例失败的异常与raises参数标识的异常一致,则标记为xfailed

    @pytest.mark.xfail(raises=AssertionError) def test_03(): assert 3 == 4 @pytest.mark.xfail(raises=ValueError) def test_04(): if isinstance('1234', int) is False: raise TypeError("传入参数非整数") 一般很少这样用,会使用pytest.raises先抛出接口异常,再断言异常信息是否符合预期。

  • run:标识是否执行此用例, 若为True则执行,若为False则用例不执行用例,直接标记该用力为XFAIL,(防止在xfail死循环。)
    默认为True,执行此测试用例。
  • strictstrict默认为False。当strict=True时,如果测试用例被标识为xpass,则把该用例标识为失败fail
    我们也可以不修改strict属性值,在全局配置文件pytest.ini中添加一行配置:xfail_strict=true即可,作用是一样的。
4、示例

""" 1.学习目标 了解预期失败方法 2.操作步骤 2.1 xfail(condition,reason) condition:当condition条件为真,用例标记失败 reason: 原因 3.使用xfail标识用例可能出现的情况: 条件 用例执行结果 测试结果 True False FAILED True True PASSED False False XFAIL False True XPASS """ # 1.导入pytest import pytest # 2.编写测试用例 # 预期失败,结果失败 @pytest.mark.xfail(True, reason="该功能尚未完成") def test_case_1(): print("预期失败,结果失败") pytest.xfail() assert False # 预期失败,结果成功 @pytest.mark.xfail(True, reason="该功能尚未计划") def test_case_2(): print("预期失败,结果成功") assert True # 预期成功,结果失败 @pytest.mark.xfail(False, reason="") def test_case_3(): print("预期成功,结果失败") assert False # 预期成功,结果成功 @pytest.mark.xfail(False, reason="") def test_case_4(): print("预期成功,结果成功") assert True if __name__ == '__main__': pytest.main() """ 运行结果: test_01.py::test_case_1 预期失败,结果失败 XFAIL test_01.py::test_case_2 预期失败,结果成功 XPASS (该功能尚未计划) test_01.py::test_case_3 预期成功,结果失败 FAILED test_01.py::test_case_4 预期成功,结果成功 PASSED ============== 1 failed, 1 passed, 1 xfailed, 1 xpassed in 0.09s ============== 说明: x(小写x)预期失败,结果失败 1 xfailed(预期失败) X(大写X)预期失败,结果成功 1 xpassed(预期成功) F预期成功,结果失败 1 failed .预期成功,结果成功 1 passed 在测试执行过程中,会将xpassed状态的用例直接转成failed状态 """ 5、忽略xfail标识

执行命令:pytest --runxfail,也就是--runxfail参数可以将全部@pytest.mark.xfail()标识忽略掉。

本文共计1413个文字,预计阅读时间需要6分钟。

Pytest框架中,如何实现德不孤的预期失败测试案例?

目录 + 1、@pytest.mark.xfail() 标记的作用 + 2、应用场景 + 3、语法参数说明 + 4、示例 + 5、忽略xfail标记 + Pytest预期失败需使用 @pytest.mark.xfail() 标记。

1、@pytest.mark.xfail() 标记的作用

期望测试失败,但实际执行时应该通过测试。

2、应用场景

测试新功能或修复旧功能时,暂时无法确保测试用例完全通过,但期望在未来修复。

3、语法参数说明

@pytest.mark.xfail()

4、示例

pythondef test_example(): assert 1==2, 预期失败

5、忽略xfail标记

当使用 `pytest.mark.xfail` 标记的测试用例通过时,可以使用 `-x` 或 `--strict` 选项忽略该标记。

Pytest框架中,如何实现德不孤的预期失败测试案例?

目录
  • 1、@pytest.mark.xfail()标记的作用
  • 2、应用场景
  • 3、语法参数说明
  • 4、示例
  • 5、忽略xfail标识

Pytest预期失败需要使用@pytest.mark.xfail()标记。

1、@pytest.mark.xfail()标记的作用

期望测试用例是失败的,但是会运行此测试用例,并且也不会影响其他测试用例的的执行。(即xfail标记并不会影响用例的运行)

如果预期失败的测试用例执行失败的则结果是xfail(不会额外显示出错误信息)

如果测试用例执行成功的则结果是xpass

在报告中会将这些用例列在“预期失败XFAIL或意外传递XPASS部分。

2、应用场景
  1. 你期望测试由于某种原因失败。
    如:用例功能不完善,或者用例执行一直失败。
  2. 对尚未实现的功能进行测试时。
  3. 尚未修复的错误进行测试时。
3、语法参数说明

如下所示:

@pytest.mark.xfail(self,condition=None, reason=None, raises=None, run=True, strict=False)

  • condition: 如果满足条件则标记用例执行失败, 默认为True
    说明:condition表示预期结果,然后用例实际执行的结果,与预期结果对比,会出现4种测试结果状态。
    failed, passed, xfailed, xpassed
    提示:condition可以等于True或者False,也可以等于一个表达式,如:condition=1>2等。
  • reason:说明用例标记为预期失败的原因, 默认为None。(必填)
  • raises=None:在raises参数中指定单个异常或异常组,表明期望用例抛出这些异常。
    如果用例失败不是因为这些异常,那用例会被标记为failed
    如果测试用例失败的异常与raises参数标识的异常一致,则标记为xfailed

    @pytest.mark.xfail(raises=AssertionError) def test_03(): assert 3 == 4 @pytest.mark.xfail(raises=ValueError) def test_04(): if isinstance('1234', int) is False: raise TypeError("传入参数非整数") 一般很少这样用,会使用pytest.raises先抛出接口异常,再断言异常信息是否符合预期。

  • run:标识是否执行此用例, 若为True则执行,若为False则用例不执行用例,直接标记该用力为XFAIL,(防止在xfail死循环。)
    默认为True,执行此测试用例。
  • strictstrict默认为False。当strict=True时,如果测试用例被标识为xpass,则把该用例标识为失败fail
    我们也可以不修改strict属性值,在全局配置文件pytest.ini中添加一行配置:xfail_strict=true即可,作用是一样的。
4、示例

""" 1.学习目标 了解预期失败方法 2.操作步骤 2.1 xfail(condition,reason) condition:当condition条件为真,用例标记失败 reason: 原因 3.使用xfail标识用例可能出现的情况: 条件 用例执行结果 测试结果 True False FAILED True True PASSED False False XFAIL False True XPASS """ # 1.导入pytest import pytest # 2.编写测试用例 # 预期失败,结果失败 @pytest.mark.xfail(True, reason="该功能尚未完成") def test_case_1(): print("预期失败,结果失败") pytest.xfail() assert False # 预期失败,结果成功 @pytest.mark.xfail(True, reason="该功能尚未计划") def test_case_2(): print("预期失败,结果成功") assert True # 预期成功,结果失败 @pytest.mark.xfail(False, reason="") def test_case_3(): print("预期成功,结果失败") assert False # 预期成功,结果成功 @pytest.mark.xfail(False, reason="") def test_case_4(): print("预期成功,结果成功") assert True if __name__ == '__main__': pytest.main() """ 运行结果: test_01.py::test_case_1 预期失败,结果失败 XFAIL test_01.py::test_case_2 预期失败,结果成功 XPASS (该功能尚未计划) test_01.py::test_case_3 预期成功,结果失败 FAILED test_01.py::test_case_4 预期成功,结果成功 PASSED ============== 1 failed, 1 passed, 1 xfailed, 1 xpassed in 0.09s ============== 说明: x(小写x)预期失败,结果失败 1 xfailed(预期失败) X(大写X)预期失败,结果成功 1 xpassed(预期成功) F预期成功,结果失败 1 failed .预期成功,结果成功 1 passed 在测试执行过程中,会将xpassed状态的用例直接转成failed状态 """ 5、忽略xfail标识

执行命令:pytest --runxfail,也就是--runxfail参数可以将全部@pytest.mark.xfail()标识忽略掉。