我有两个场景,我想在另一个场景中动态执行一个场景的步骤:
@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的步骤。有没有办法做到这一点?
答案 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 in
与Given 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 ...
中重复的步骤我们称这样的步骤包括其中的多个步骤作为"超级步骤" (您可以将其称为方案)并在任何您想要的地方使用它。这是处理你案件的方法之一。