【问题标题】:Is it possible to reuse godog scenarios?是否可以重用 godog 场景?
【发布时间】:2017-12-08 16:54:05
【问题描述】:
我在 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
我想知道是否可以为多个堆栈重用这个场景?理想情况下,我会为每个堆栈重用这个场景,如果那个堆栈失败了,那么我会失败那个场景,但不是所有的测试。每个堆栈都独立于其他堆栈。我不确定这是否可行,或者我是否必须手动将每个堆栈定义为场景并这样做。
【问题讨论】:
标签:
go
cucumber
integration-testing
【解决方案1】:
Scenario Outline 和 Examples(如记录 here 用于 behat,但也在 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 |
您的场景将被调用 3 次,参数为 [Minishift, Running]; [Redshift, Running] 最后 [Lateshift, Running] 被传递到第一步。
【解决方案2】:
你在这个场景中的所有步骤都可以总结为Given minishift is "running" at workspace named "stack"。关键是这个步骤定义可以调用您在所描述的场景中定义的所有步骤。这是一种常见的做法,以防止在多个场景中出现冗余上下文。
总的来说,您可以将一堆步骤组合成一个前提条件,这是步骤的常见组合,这是一种提倡的做法。
此外,我注意到您的场景定义中有 两个 When 步骤,我不建议这样做。 当是一个动作并且为了防止歧义,你不应该在场景中有两个动作,不清楚你的场景到底是什么,或者为什么它会失败。这只是意味着在这种情况下,您有两种情况,而不是一种。
让你的场景清晰而小巧,它应该是可重用和可组合的。
另一种选择是@tag您需要运行 minishift 的场景,例如:
@minishift
Scenario: expected behavior
When I do that action
Then I expect this outcome
然后您可以在场景挂钩之前使用 godog 以按预期启动 minishift。