Skip to content

Pytest设置跳过、预期失败用例

Pytest 设置跳过、预期失败用例

简介

在使用 pytest 进行测试开发时,有时候可能需要跳过某些测试用例或者标记某些测试用例为预期失败。pytest 提供了一些装饰器和命令行选项来实现这些功能。

Pytest 设置跳过、预期失败用例的优点

  1. 灵活性:跳过和预期失败的功能能够更加灵活地管理和执行测试用例。可以根据需要选择性地跳过一些用例或声明一些用例为预期失败,从而灵活地处理测试用例的执行情况。

  2. 节省时间:当某些用例无法顺利通过或者尚未完成实现时,可以将其标记为跳过或预期失败,这样在整个测试运行过程中,这些用例将不会执行。这有助于节省宝贵的执行时间,特别是在大型测试套件中运行时。

  3. 及时反馈:预期失败的测试用例会被执行,但不会导致整个测试运行失败。这意味着可以在代码发生更改后,保留这些预期失败的测试用例,并随时接收有关它们是否依然失败的反馈。这在开发过程中非常有用,可以确保不会在修改代码后破坏先前的功能。

  4. 可维护性:通过使用跳过和预期失败的功能,可以在测试代码中清晰地标记和记录有关测试用例是否被跳过或预期失败的信息。这有助于提高代码的可读性和可维护性,也方便了其他开发人员理解测试的目的和状态。

跳过(Skip)及预期失败(xFail)的使用

  • 这是 Pytest 的内置标签,可以处理一些特殊的测试用例,不能成功的测试用例。
  • skip - 始终跳过该测试用例。
  • skipif - 遇到特定情况跳过该测试用例。
  • xfail - 遇到特定情况,产生一个“期望失败”输出。

注意:Skip 用于标记测试用例,以指示该测试用例应该被跳过而不执行。 而 xFail 用于标记测试用例,以指示该测试用例是预期失败的。这意味着测试用例可以运行,但失败时不会被视为实际失败,而是被记录为已预期的失败。

Skip 使用场景

  • 调试时不想运行这个用例。
  • 标记无法在某些平台上运行的测试功能。
  • 在某些版本中执行,其他版本中跳过。
  • 比如:当前的外部资源不可用时跳过。

  • 如果测试数据是从数据库中取到的。

  • 连接数据库的功能如果返回结果未成功就跳过,因为执行也都报错。

  • 解决 1:添加装饰器

  • @pytest.mark.skip

  • @pytest.mark.skipif

  • 解决 2:代码中添加跳过代码

  • pytest.skip(reason)

代码示例:

import pytest

@pytest.mark.skip
def test_a():
    assert True

@pytest.mark.skip(reason="代码没有实现")
def test_b():
    assert False

运行结果:

代码示例:

import pytest

@pytest.mark.skipif(sys.platform == 'darwin', reason="does not run on mac") # 如果是mac系统则跳过执行
def test_case1():
    assert True

@pytest.mark.skipif(sys.platform == 'win', reason="does not run on windows") # 如果是windows系统则跳过执行
def test_case2():
    assert True

xfail 使用场景

  • 与 skip 类似 ,预期结果为 fail ,标记用例为 fail。
  • 用法:添加装饰器 @pytest.mark.xfail

代码示例:

import pytest

@pytest.mark.xfail
def test_a():
    assert  1 == 2

@pytest.mark.xfail
def test_b():
    assert  2 == 2

运行结果:

总结

  • Pytest 设置跳过、预期失败用例标签的使用场景。
  • Pytest 设置跳过、预期失败用例标签的使用。