如何使用ruby定义场景大纲的步骤

时间:2017-04-19 13:31:07

标签: ruby cucumber

我有一份注册表,需要用黄瓜和红宝石进行测试。 我决定在表中使用不同值的Scenario Outline:

Scenario Outline: Log in with valid data
   Given I am on the Sign up Form
   When I provide <Email>
   And I provide Confirm <СEmail>
   And I provide <Password>
   And I provide Confirm <СPassword>
   And I click on Register button
   Then I registered to the site

Examples:
| Email                | CEmail              | Password | CPassword       |
| vip17041@yopmail.com |vip17041@yopmail.com | 123      | 123             |
| vip17042@yopmail.com |vip17042@yopmail.com |123       | 123             | 

现在我需要创建步骤定义。在步骤定义中,我需要从表中输入字段值。 我怎么能这样做?以前我用过下一个方法:

    When(/^I provide vip(\d+)@yopmail\.com$/) do |email|
         browser.text_field(:name, "Email").set("email@yopmail.com")

但是我怎样才能设置而不是硬编码的电子邮件 - 来自我的桌子的电子邮件?

由于

2 个答案:

答案 0 :(得分:0)

如果您希望将捕获与电子邮件地址合并:

When(/^I provide (vip\d+)@yopmail\.com$/) do |email|
     browser.text_field(:name, "Email").set("#{email}@yopmail.com")
end

这将使用字符串&#34; @ yopmail.com&#34;

关于情景大纲如何运作的说明

场景大纲将从示例表中获取行,并只使用列创建使用与列标题匹配的值代替占位符的各个场景。

例如:

Scenario Outline: A note
 Given I am logged in as <user>
 When I go to the homepage
 Then I should see "Welcome Back, <display_name>"

Examples:
| user           | display_name |
| rick@stley.com | Rick Astley  |
| tammy1992      | Tammy Holmes |

将转换为两种情况:

Scenario: A note
 Given I am logged in as rick@stley.com
 When I go to the homepage
 Then I should see "Welcome Back, Rick Astley"

Scenario: A note
 Given I am logged in as tammy1992
 When I go to the homepage
 Then I should see "Welcome Back, Tammy Holmes"

这与编写正常场景没有什么不同,您使用的占位符只是完成您正在编写的步骤。

我将如何编写您的方案

Cucumber是一种旨在弥合测试人员,开发人员和管理人员之间的会话差距的工具。

Scenario Outline: Log in with valid data
   Given I am on the Sign up Form
   When I sign up with the email "<Email>" and password "<Password>"
   Then I should be able to log in as "<Email>" with password "<Password>"

Examples:
| Email                | Password |
| vip17041@yopmail.com | 123      |
| vip17042@yopmail.com | 123      |

我们不必知道该过程的每个步骤,并且要素文件显示测试的意图。 这似乎在寻找的是您是否可以在注册新帐户后登录,那么为什么不这样写呢?

答案 1 :(得分:0)

作为使用Cucumber多年的人,我建议您避免使用Scenario Outlines。功能和场景用于以简单明了的术语表达意图,而不是使用表格编程。

您可以将您的方案编写为

if (i % 10 == 9)

好的方案说明了他们在标题中尝试验证的行为,然后采取与此行为一致的步骤。他们无需解释您的应用程序如何实现该行为。将这些信息放在您的方案中会使它们更长,更难实现,并且更难以维护。

这种简单场景的副作用是步骤定义更简单,更容易编写。这里不需要正则表达式的参数或表格解析。

您可以在此处查看此方法的简单示例(https://github.com/diabolo/cuke_up/tree/master/features),