Cucumber-JVM:根据场景的可视文本执行另一个场景/场景外观中的步骤

时间:2017-12-12 11:37:46

标签: java cucumber cucumber-jvm

我有两个场景,我想在另一个场景中动态执行一个场景的步骤:

@scenario-a
Scenario: My scenario A
Given I do Step1
When I do Step2
Then I do Last Step

@scenario-b
Scenario: My Scenario B
Given I do Step1
When I reuse "My Scenario A"
Then I do Last Step

基本上,我希望将场景作为参数传递给“我重用”我的场景A“场景B的步骤”,并执行场景A的步骤。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

黄瓜不支持这个,你真的不想这样做。如果你这样做会在某些时候发生,你将修改scenario-a,那时你将打破一些/所有依赖它的场景。

相反,您需要做的是在方案-a中找到行为的名称。让我们说场景-a正在登录。然后场景-a就是证明你可以登录,即开发登录行为。场景-b想要使用此行为来开发一些不同的行为,例如设置电子邮件首选项。我们就是这样做的。

Scenario: I can sign in
  Given I am registered
  When I sign in
  Then I should be signed in

这个有趣的部分是When I sign in,让我们来看看如何实现它(所有代码都是伪ruby)

When "I sign in" do
  sign_in user: @i
end

module SignInStepHelper
  def sign_in(user: )
    visit login_path
    fill_in username with user.email
    fill_in password with user.password
    submit_form
  end
end
World SingInStepHelper

现在我们可以在scnenario-b中使用这种行为

Scenario: Set email preferences
  Given I am registered
  And I am signed in
  When I set my email preferences
  Then ...

为了重复使用我们的行为,我们又写了一步。这非常重要:使用黄瓜重复使用的最佳方法是重复使用方法,不要重复使用步骤。

Given "I am signed in" do
  sign_in user: @i
end

了解我们如何重复使用我们的sign_in行为,而无需使用Cucumber做任何聪明的事情(我们只是在不同的步骤定义中进行相同的调用)。另请注意时态的变化以及有效性的变化When I sign inGiven I am signed in

这种方法推动你如何从Cucumber做你的编程语言,并可以用于你开发的任何行为

答案 1 :(得分:0)

为了处理这种情况,我们创建一个单行步骤,这又将在胶合函数内部进行严格的测试步骤。我的建议与@diabolist已经说过的相似。鉴于您正在测试在线购物应用程序,并且您只想重复使用将产品添加到购物车的方案

# Below scenario is very basic one to ensure if user can place an order
Scenario: To check if a product can be added to cart
Given when i login to onlineshopping.com as bhuvanesh
When i search for product "google home mini"
And set quantity of product to "3"
Then add product to cart
And setting shipping address as "1, Street name, city, state - 12345"
When i place the order
Then order confirmation should be displayed to user

#Now that i want to do extensive testing by adding more products to cart
Scenario: To check if shopping cart can hold upto 100 products(max size)
Given when i login to onlineshopping.com as bhuvanesh
When add item "Product=google home mini#Count=2" to shipping cart
And add item "Product=google home#Count=3" to shipping cart
add item "Product=Google Pixel2#Count=10" to shipping cart
add item "Product=Apple Ipad Mini4#Count=20" to shipping cart
### and so in
And setting shipping address as "1, Street name, city, state - 12345"
When i place the order
Then order confirmation should be displayed to user

因此,如果你看看上面两个场景,我已经结合了场景1中的步骤2,3和4,这些步骤是在场景2的步骤2,3,4 ...

中重复的步骤

我们称这样的步骤包括其中的多个步骤作为"超级步骤" (您可以将其称为方案)并在任何您想要的地方使用它。这是处理你案件的方法之一。