除非你用过Cucumber命名,你可能好奇Lettuce的概念术语。
如果是这样,本文将指导你认识Lettuce非常基本的关键词。
Features
由于Lettuce被用来测试项目的行为,因此行为被分解成系统的功能。
在列举了功能之后,你需要创建场景来描述这些功能。因此,场景是功能的组成部分。
让我们通过示例学习:假设我们想创建一个管理地址簿的系统。
好的,通讯录最基本的特点之一就是增加联系人,其中包括他们的姓名和电话号码。
这是Lettuce怎样来描述特征:
Feature: Add people to address book
In order to organize phone numbers of friends
As a wise person
I want to add a people to my address book
Scenario: Add a person with name and phone number
Given I fill the field "name" with "John"
And fill the field "phone" with "2233-4455"
When I save the data
Then I see that my contact book has the persons:
| name | phone |
| John | 2233-4455 |
Scenario: Avoiding a invalid phone number
Given I fill the field "name" with "John"
And fill the field "phone" with "000"
When I save the data
Then I get the error: "000 is a invalid phone number"
在这个Feature上面我们可以发现一些元素,例如:
Feature名:
Feature: Add people to contact book
Feature标题
In order to organize phone numbers of friends
As a wise person
I want to add a people to my address book
场景
Scenario: Add a person with name and phone
Given I fill the field "name" with "John"
And fill the field "phone" with "2233-4455"
When I save the data
Then I see that my contact book has the persons:
| name | phone |
| John | 2233-4455 |
Scenario: Avoiding a invalid phone number
Given I fill the field "name" with "John"
And fill the field "phone" with "000"
When I save the data
Then I get the error: "000 is a invalid phone number"
场景
一个或多个场景组成一个Feature。有两种场景:
简单的
简单的场景是由步骤组成的,不管它们是简单的还是表式的步骤。
上面的那个特征是由两个简单的场景构成。
概述的
概述的场景非常方便,因为它们帮助你避免重复。
假设我们需要多次填写同一表格,每次使用不同的数据集。下面演示如何使用Scenario Outline(场景概述):
让我们来看看如何做Scenario Outline:
Feature: Apply all my friends to attend a conference
In order to apply all my friends to the next PyCon_
As a lazy person
I want to fill the same form many times
Scenario Outline: Apply my friends
Go to the conference website
Access the link "I will attend"
Fill the field "name" with "<friend_name>"
Fill the field "email" with "<friend_email>"
Fill the field "birthday" with "<friend_birthdate>"
Click on "confirm attendance" button
Examples:
| friend_name | friend_email | friend_birthdate |
| Mary | mary@domain.com | 1988/02/10 |
| Lincoln | lincoln@provider.net | 1987/09/10 |
| Marcus | marcus@other.org | 1990/10/05 |
简单地说,上面的场景相当于下面展示的冗长的代码。
Feature: Apply all my friends to attend a conference
In order to apply all my friends to the next PyCon_
As a lazy person
I want to fill the same form many times
Scenario: Apply Mary
Go to the conference website
Access the link "I will attend"
Fill the field "name" with "Mary"
Fill the field "email" with "mary@domain.com"
Fill the field "birthday" with "1988/02/10"
Click on "confirm attendance" button
Scenario: Apply Lincoln
Go to the conference website
Access the link "I will attend"
Fill the field "name" with "Lincoln"
Fill the field "email" with "lincoln@provider.net"
Fill the field "birthday" with "1987/09/10"
Click on "confirm attendance" button
Scenario: Apply Marcus
Go to the conference website
Access the link "I will attend"
Fill the field "name" with "Marcus"
Fill the field "email" with "marcus@other.org"
Fill the field "birthday" with "1990/10/05"
Click on "confirm attendance" button
正如你所注意到的,Scenario Outline非常有用,帮助避免文本和代码重复。
步骤及其定义
同场景一样,步骤也有两种:
简单的步骤
简单的步骤实际上很简单,它们与场景中的步骤定义有关。
Lettuce认为每个场景的每一行是一个简单的步骤。唯一的例外是,如果该行的第一个非空白字符是管道 |。在这种情况下,Lettuce会认为这个步骤是表格的步骤。
例如,一个简单的步骤可能看起来像这样:
Given I go to the conference website
表格步骤
模拟到概叙的场景,和避免重复文本,表格步骤非常有用。
表格步骤特别有用,可以在场景中设置一些数据集,或者在场景结束时将一组数据与预期结果进行比较。
不管怎样,当你发现它有用,随意使用这个表格步骤。
例子:
Given I have the following contacts in my database
| name | phone |
| John | 2233-4455 |
| Smith | 9988-7766 |
网友评论