是否有可能重用godog场景?

时间:2017-12-08 16:54:05

标签: go cucumber integration-testing

我在godog中有一个定义的场景:

User starts a workspace with stack
    Given Minishift has state "Running"
    When user triggers workspace creation for stack
    Then workspace should be starting
    When user looks at the workspace status
    Then the workspace status should be running and creation successful

我想知道是否有可能将此场景重用于多个堆栈?理想情况下,我会为每个堆栈重用此方案,如果该堆栈失败,那么我将失败那个场景但不是所有测试。每个堆栈独立于其他堆栈。我不确定这是否可行,或者我是否必须手动将每个堆栈定义为场景并按此方式执行。

2 个答案:

答案 0 :(得分:0)

带有Scenario Outline

Examples(记录为here,但也在Godog中实施)按照您的描述进行操作:

Scenario Outline: User starts a workspace with stack
    Given "<stack>" has state "Running"
    When user triggers workspace creation for stack
    Then workspace should be starting
    When user looks at the workspace status
    Then the workspace status should be running and creation successful
Examples:
    | stack     |
    | Minishift |
    | Redshift  |
    | Lateshift |

您的方案将被调用三次,参数为[MinishiftRunning]; [RedshiftRunning],最后[LateshiftRunning]被传递到第一步。

答案 1 :(得分:0)

在这种情况下,您的所有步骤都可以概括为Given minishift is "running" at workspace named "stack"。关键是该步骤定义可以调用在上述场景中定义的所有步骤。为了防止在多种情况下出现冗余上下文,这是通常的做法。

总的来说,您可以将步骤堆栈组合成一个前提,这是通常的步骤组合,这是提倡的做法。

此外,我注意到您在方案定义中有两个时间步骤,我不建议这样做。 是一个动作,并且为了防止歧义,您在场景中不应有两个动作,这不清楚,您的场景到底是什么意思,或者为什么会失败。在这种情况下,这仅表示您有两种情况,而不是一种。

使您的方案清晰明了,小巧,应该是可重用且可组合的。

另一种选择是 @标记您需要运行小班的方案,例如:

@minishift Scenario: expected behavior When I do that action Then I expect this outcome

然后,您可以在场景挂起之前使用godog,以便按预期方式启动minishift。