跳转到主要内容

Pytest插件,提供“run_on_pass”标记

项目描述

PyPI - Latest Release PyPI - Python Versions GitHub Actions - Build Status

pytest-passrunner:一个提供“run_on_pass”标记的Pytest插件

pytest-passrunner插件为Pytest引入了一个名为run_on_pass的新标记,它可以用来标记整个测试套件,以仅当其中的所有先前的测试都成功通过时才运行测试。这允许用户使用测试结构,其中先前的测试为后续测试设置。如果先前的测试失败,后续的测试将无法正常运行,因此应该“xfailed”(预期失败)而不是尝试执行。以下是一些示例。

安装与使用

如何安装

pytest-passrunner可以通过以下方式从PyPI轻松安装

$ pip install pytest-passrunner

如果需要,也可以克隆存储库并手动安装pytest-passrunner

$ git clone https://github.com/1313e/pytest-passrunner
$ cd pytest-success
$ pip install .

现在可以在测试中使用pytest.mark.run_on_pass来使用run_on_pass标记。

示例用法

当在Pytest测试套件中使用《run_on_pass》标记时,它会标记套件中的所有测试,使其仅在套件中的所有先前测试都通过时才运行。另一种说法是,如果在标记的测试套件中有一个测试失败,则所有剩余的测试都将自动标记为“xfail”(预期失败)且不会运行。

此标记的一个用例是当您想要编写一个测试套件,其中特定对象在测试过程中被修改。在这种情况下,测试套件中的特定测试只有在所有先前测试都通过的情况下才能正确运行是很常见的,否则对象不在预期的状态。以下是一个示例

# Import pytest
import pytest


# Define Pytest suite
class Test_list(object):
    # Create fixture that is shared between all tests in the suite
    # In this case, a list object
    @pytest.fixture(scope='class')
    def lst(self):
        # Create empty list
        lst = []

        # Return it
        return(lst)

    # Perform test that sets up this list
    def test_1(self, lst):
        # Append 1 to the list
        lst.append(1)

        # Test that 1 was appended
        assert lst == [1]

    # Perform test that requires lst to be [1]
    def test_2(self, lst):
        # Append 2 to the list
        lst.append(2)

        # Test that 1 and 2 are in the list now
        assert lst == [1, 2]

在这个简单的测试脚本中,一个列表对象在《Test_list》测试套件中的所有测试之间共享。在第二个测试《test_2》中,假设这个列表对象被第一个测试正确设置。如果《test_1》由于任何原因而失败,那么《test_2》(以及该测试套件中该测试之后的任何进一步测试)将不可能通过,因为列表对象从未被正确设置。然而,《test_2》(以及其后的任何测试)仍然会被运行,浪费时间和在pytest总结概览中产生无用的错误。

为了解决这个问题,我们可以应用《run_on_pass》标记

# Import pytest
import pytest


# Define Pytest suite with the 'run_on_pass' marker
@pytest.mark.run_on_pass
class Test_list(object):
    # Create fixture that is shared between all tests in the suite
    # In this case, a list object
    @pytest.fixture(scope='class')
    def lst(self):
        # Create empty list
        lst = []

        # Return it
        return(lst)

    # Perform test that sets up this list
    def test_1(self, lst):
        # Append 1 to the list
        lst.append(1)

        # Test that 1 was appended
        assert lst == [1]

    # Perform test that requires lst to be [1]
    def test_2(self, lst):
        # Append 2 to the list
        lst.append(2)

        # Test that 1 and 2 are in the list now
        assert lst == [1, 2]

如果现在《test_1》的执行失败,《test_2》(以及该测试套件中该测试之后的任何进一步测试)将不会运行,并标记为“xfail”。xfailed的测试在pytest总结概览中不会生成任何错误消息,也不会被视为失败的或错误的测试。这使总结更简洁,不会浪费在无法通过测试上的时间。

项目详细信息


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

pytest-passrunner-1.0.0.tar.gz (6.1 kB 查看哈希值)

上传时间

构建分布

pytest_passrunner-1.0.0-py3-none-any.whl (6.2 kB 查看哈希值)

上传时间 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面