如何使用 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),
我有一张注册表,需要使用黄瓜和 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),