如何控制Pytes中的增量测试用例

2024-09-28 15:11:13 发布

您现在位置:Python中文网/ 问答频道 /正文

@pytest.mark.incremental
class Test_aws():

    def test_case1(self):
        ----- some code here ----
        result = someMethodTogetResult
        assert result[0] == True
        orderID = result[1]

    def test_case2(self):
        result = someMethodTogetResult # can be only perform once test case 1 run successfully.
        assert result == True

    def test_deleteOrder_R53HostZonePrivate(self):
        result = someMethodTogetResult
        assert result[0] == True

当前的行为是如果测试1通过,则测试2运行,如果测试2通过,则测试3运行。在

我需要的是: 如果测试用例1通过,则应运行测试用例3。测试用例2不应该改变任何行为。有什么想法吗?在


Tags: testselfawstruepytestdef测试用例assert
3条回答

为了补充hoefling's answer,另一个选择是使用pytest-steps来执行增量测试。如果您希望在步骤之间共享某种增量状态/中间结果,这尤其有助于您。在

但是,它不实现高级依赖机制,如pytest-dependency,因此请使用更适合您目标的包。在

使用pytest步骤,hoefling的示例将写下:

import random
from pytest_steps import test_steps, depends_on

def step_instance_start():
    assert random.choice((True, False))

@depends_on(step_instance_start)
def step_instance_stop():
    assert random.choice((True, False))

@depends_on(step_instance_start)
def step_instance_delete():
    assert random.choice((True, False))

@test_steps(step_instance_start, step_instance_stop, step_instance_delete)
def test_suite(test_step):
    # Execute the step
    test_step()

编辑:有一个新的“发电机”模式,使它更容易:

^{pr2}$

有关详细信息,请查看documentation。(顺便说一下,我是这个包的作者;)

您可以使用pytest-ordering包来使用pytest标记对测试进行排序。包的作者解释了here的用法

示例:

@pytest.mark.first
def test_first():
    pass

@pytest.mark.second
def test_2():
    pass


@pytest.mark.order5
def test_5():
    pass

我猜您正在寻找^{},它允许在测试之间设置有条件的运行依赖关系。示例:

import random
import pytest


class TestAWS:

    @pytest.mark.dependency
    def test_instance_start(self):
        assert random.choice((True, False))

    @pytest.mark.dependency(depends=['TestAWS::test_instance_start'])
    def test_instance_stop(self):
        assert random.choice((True, False))

    @pytest.mark.dependency(depends=['TestAWS::test_instance_start'])
    def test_instance_delete(self):
        assert random.choice((True, False))

只有在test_instance_start成功时,test_instance_stop和{}才会运行,否则将跳过。但是,由于test_instance_delete不依赖于test_instance_stop,无论后一个测试的结果如何,前者都将执行。多次运行示例测试类以验证所需的行为。在

相关问题 更多 >