14

假设我有这些测试功能:

def test_function_one():
    assert # etc...

def test_function_two():
    # should only run if test_function_one passes
    assert # etc.

如何确保 test_function_two 仅在 test_function_one 通过时运行(我希望它是可能的)?

编辑: 我需要这个,因为测试二正在使用测试一验证的属性。

4

4 回答 4

6

您可以使用名为pytest-dependency的 pytest 插件。

代码可能如下所示:

import pytest

@pytest.mark.dependency()   #First test have to have mark too
def test_function_one():
    assert 0, "Deliberate fail"

@pytest.mark.dependency(depends=["test_function_one"])
def test_function_two():
    pass   #but will be skipped because first function failed
于 2017-08-23T08:24:03.550 回答
1

我认为你的解决方案是模拟 test1 设置的值。

理想情况下,测试应该是独立的,因此请尝试模拟该值,以便您可以随时运行 test2,事实上,您还应该模拟(模拟)脏值,以便您可以看到 test2 在收到意外数据时的行为。

于 2012-08-31T03:16:25.583 回答
1

我正在使用名为pytest-dependency的 pytest 插件。

添加到上述内容 - 如果您在测试类中使用测试 - 您必须将测试类名称添加到函数 test name

例如:

import pytest


class TestFoo:

    @pytest.mark.dependency()
    def test_A(self):
        assert False

    @pytest.mark.dependency(depends=['TestFoo::test_A'])
    def test_B(self):
        assert True

因此,如果 test_A 失败 - test_B 将不会运行。如果 test_A 通过 - test_B 将运行。

于 2020-07-19T10:15:39.147 回答
0

我认为这就是你想要的:

def test_function():
    assert # etc...
    assert # etc...

这符合您的要求,即仅当第一个“测试”(断言)通过时才运行第二个“测试”(断言)。

于 2012-05-30T14:49:34.370 回答