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

How to define steps for Scenario Outline with ruby

我有一张注册表,需要使用黄瓜和 ruby 对其进行测试。 我决定在 table:

中使用具有不同值的用户场景大纲
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             | 

现在我需要创建步骤定义。在步骤定义中,我需要将 table 中的值放入字段中。 我怎么能那样做?之前我用的是下一个方法:

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

但是我如何设置而不是硬编码电子邮件 - 来自我的 table 的电子邮件?

谢谢

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

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

这会将捕获的文本("vip" 按字面意思加上长度为 1 或更大的任意数量的数值)与字符串“@yopmail.com”

连接起来

关于场景大纲如何运作的注释

场景大纲将从示例 table 中抓取行,并简单地使用列来创建单独的场景,这些场景使用与列 headers 匹配的值代替占位符。

例如:

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      |

我们不必知道流程的每个步骤,功能文件显示了测试的意图。 这个好像是找的是注册新账号后能不能登录,为什么不这样写呢?

作为使用 Cucumber 多年的人,我建议您避免使用 Scenario Outlines。功能和场景用于以简单明确的方式表达意图,而不是使用 tables.

进行编程。

您可以将场景写成

Scenario: I should be welcomed when I sign in
  Given I am registered
  When I sign in
  Then I should be welcomed

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

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

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