使用参数化测试或单独测试进行工作流测试

2024-09-29 23:27:44 发布

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

如何测试工作流-使用单独测试或参数化测试?你知道吗

我有这样的工作流程

A->;B->;c->;D->;E->;Z

用户可以跳过A和Z之间的任何步骤,但不能跳过A和Z

如果我必须编写测试用例,我们应该编写单独的测试用例还是参数化测试用例

如果我编写单独的测试,我必须编写四个测试,但参数化的代码要少一个。你知道吗

我尝试了参数化测试,因为断言中的if语句变得不那么可读。你知道吗

A = WorkflowStep('A')
B = WorkflowStep('B')
C = WorkflowStep('C')
D = WorkflowStep('D')
E = WorkflowStep('E')
Z = WorkflowStep('Z')


@pytest.mark.parametrize('skipStep', [([B]), ([C]), ([D]), ([E])])
test_skip_step(skipStep):
    workflow = Workflow.create().skip(skipStep);
    summary = workflow.goTo(Z)

    if skipStep != B:
       summary.hasB()
    if skipStep != C:
       summary.hasC()
    if skipStep != D:
       summary.hasD()
    if skipStep != E:
       summary.hasE()

我应该采取什么方法? -编写单独的测试以跳过每个步骤? -写参数化测试?你知道吗


Tags: 代码用户gt参数if步骤测试用例断言
3条回答

考虑到您提供的要求,如果我要编写一个测试用例,我将编写以下内容:

  • 一个测试用例场景,用于检查用户是否可以跳过步骤(两个测试用例)
  • 一个测试用例场景来检查用户是否可以跳过步骤(四个测试用例?)
  • 一个测试用例场景,以确保工作流像您所说的那样流动(n个测试用例)

但是,要回答您的问题,取决于您的公司将批准的测试策略。必须考虑诸如您正在测试的单元的关键性之类的因素。最后,我会选择一种参数化的方法,但不是一种硬编码的方法。你知道吗

如果你能真正的参数化每一步,那么你不应该看到任何开关盒内的功能。如果你做不到,那就去做单独的功能,因为我们可以合理地预期,维护每一个功能都需要不同的操作。你知道吗

一句话:去做一些你可以轻松维护的事情,如果你有时间,写更多的测试用例。 最后请记住,您是为人类编码的,因此可读性是一个很好的特性。你知道吗

如果您真的需要执行所有这些测试,那么参数化方法对于避免大型类似实现的测试用例集的维护问题是有意义的。我建议将摘要接口从hasBhasC。。。收件人:hasStep(step)。这样你就可以更好地概括你的测试了。你知道吗

skippableSteps = [B, C, D, E]

@pytest.mark.parametrize('skipStep', [([B]), ([C]), ([D]), ([E])])
def test_skip_forOneStepOfBCDE_leavesOtherStepsIn(skipstep)
    workflow = Workflow.create()
    workflow.skip(skipStep).goTo(Z)
    expectedSteps = skippableSteps[:].remove(skipstep)
    for step in expectedSteps:
        assert summary.hasStep(step)

我的看法是,测试用例中不应该有if-else语句来断言。它要求对可维护性和可读性进行单独的测试。你知道吗

可能是相反的事情,可以帮助建立工作流使用的步骤,需要在场,然后测试他们在那里。另外,在count上断言,这样不需要的步骤就会渗透到内存中。你知道吗

A = WorkflowStep('A')
B = WorkflowStep('B')
C = WorkflowStep('C')
D = WorkflowStep('D')
E = WorkflowStep('E')
Z = WorkflowStep('Z')


@pytest.mark.parametrize('includedSteps', [(['A','C','D','E','Z']), (['A','B','D','E','Z']), (['A','B','C','E','Z']), (['A','B', 'C','D','Z'])])
test_skip_step(includedSteps):
    workflow = Workflow.build(includedSteps);
    summary = workflow.goTo(Z)

   // To ensure encluded steps
    step in includedSteps:
        assert summary.hasStep(step)

    // To avoid unwanted steps
    assert summary.stepsCnt == len(includedSteps)

相关问题 更多 >

    热门问题