1.Gherkin简介:
Cucumber是一个解释程序,就像ruby命令执行解释 .rb文件里的Ruby代码一样,Cucumber用来执行解释 .feature文件里的Gehrkin代码。
2. 关键字:
当你编写一个feature文件的时候,会用到很多Gherkin语言里特定的关键字,主要包括下这面些:
• Feature
• Background
• Scenario
• Scenario outline
• Scenarios (or examples)
• Given
• When
• Then
• And (or but)
• | (用来定义表格)
• """ (定义多行字符串)
• # (注释)
我们可以在关键字后面写任何我们想写的东西。关键字Given, When, Then, And 和 But用来指示一个场景中的步骤。
每一个feature文件必须以关键字Feature开始,且紧跟着一个冒号和一个描述。这个描述可以在很多行上,但一般来说比较好的模式是写一句简短的概述,紧接着在下一行对此进行一个简明的描述。比如:
Feature: Book flight
In order to book a flight
As a user
I want to find the cheapest flight
当然有一点需要指出的是,Cucumber并不关心你在这里写了什么。它只是简单的忽略这些代码直到它碰到关键字Background, Scenario 和 Scenario Outline. 我们写这些的目的仅仅是为了沟通和交流。
3. Scenarios/Steps/The cucumber Command
1. Scenario:一个feature文件里面可以有很多个Scenario,一个Scenario就是一个具体的你想要测试的功能点,一个Scenario又是由很多个步骤(Steps)组成的。Scenario明确的描述我们期望的程序的行为,且方便不同职位的人员进行沟通,因为你只要看到一个Scenario,很容易就知道它想做什么。
一个Scenario的第一部分是Scenario关键字后面紧跟一个冒号和一个对应该场景的描述。如下:
Feature: Book flight
In order to book a flight
As a user
I want to find the cheapest flight
Scenario: Successful booking flight
2. Steps:每个Scenario都可以使用任意数量的步骤来描述任何发生在该场景里的事情,一个步骤通常是一行单独的文本并且由以下这些关键字开头:Given,When,Then,And and But. 如下:(注意:步骤后面不需要跟冒号)
Feature: Book flight
In order to book a flight
As a user
I want to find the cheapest flight
Scenario: Successful booking flight
Given I visit a website to book flight
3. The cucumber Command: 一旦我们写好了一个feature文件,我们就可以使用 命令来运行它。如果命令后不跟任何东西的话,那么它会执行所有的.feature文件。如果我们只想运行某一个.feature文件,我们可以使用命令
4.Given/When/Then/And/But
a) Given:表示scenario中我们接受/认为是真的东西,它将为后面的when(事件/操作)和Then(输出)提供背景/上下文;如:Given I visit a website
b)When:表示scenario中的事件或动作;如:When I click the submit button.; 一般我们喜欢在一个scenario中只有一个事件或动作,因为这样容易理解scenario的目的且容易找到错误当失败的时候;
c) Then:表示预期的输出;
d) And/ But: 我们可以使用And 和 But 作为Given/When/Then的同义词,如:” ” 这里的And就是Given的意思;再如:”,” 这里的But就是Then的意思;
例:
Scenario: transfer money (declarative)
Given I have $100 inchecking
And I have $20 insavings
When I transfer $15 from checking to savings
Then I should have $85 inchecking
And I should have $35 insavings
5. Tags:
正如前面提到的一个.feature 文件里面可以有很多scenario组成。如果我们运行了一个包含有很多个scenario的feature文件时,它会执行这个文件里面所有的 scenario;但是有的时候我们可能只想运行某一个/些特别的scenario时,这时我们可以使用Tags;
在Cucumber里Tag看上去和Ruby的实例变量比较像。如@wip, @foo…可以在Feature或Scenario关键字前给feature或scenario添加任意数量的tags,如:
@approved @book_flight
Feature: Book flight
@wip
Scenario: Book a flight on web
一个Scenario会继承指定给Feature的tags,所以在上面的例子中,Scenario有三个tags:@approved @book_flight @wip. 然后我们就可以使用命令:cucumber --tags tag_name来运行我们想运行的那部分Scenario.如:cucumber --tags @wip
此外,--tags还支持复杂的表示示,包括: AND,OR和NOT,如下:
cucumber --tags
(foo,)bar
#@foo || @bar 运行所有包含@foo OR @bar的scenarios
cucumber --tags @foo --tags @bar
# @foo && @bar 运行所有包含@foo AND @bar的scenarios
cucumber --tags ~@dev
#!@dev 运行所有不包含@dev的scenario
cucumber --tags @foo,~@bar --tags @baz
# (@foo || !@bar) && @baz
来源: http://blog.sina.com.cn/s/blog_6b59aaa701017s6l.html
- Cucumber测试驱动开发
Cucumber是一种BDD实践开发工具,属于敏捷开发的组成部分. 在敏捷开发中,对用户进行需求分析时,不是像传统的P&D的开发方式,首先编写大量的用户需求分析文档,而是通过一个个 ...
- Gherkin学习笔记
前言 由于项目准备使用BDD模式开发,所以最近在学习BDD,同时也记录下自己的学习点滴. 参考原文:https://github.com/cucumber/cucumber/wiki/Gherkin ...
- Frontend Development
原文链接: https://github.com/dypsilon/frontend-dev-bookmarks Frontend Development Looking for something ...
- 行为驱动开发(BDD) - 深入了解
行为驱动开发(BDD) - 一个快速的描述和示例 BDD表示乙 ehavior ð里文ð才有发展.用于描述行为的语法是Gherkin. 这个想法是尽可能自然地描述一种语言应该发生什么. 如果你熟悉单元 ...
- 1分钟入门接口自动化框架Karate
介绍 在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate Karate是基于另一个BDD测试框架Cucumber来建立的,并且共用了一些相同的思想.其中之一就是使用Gher ...
- 接口自动化测试框架Karate入门
介绍 在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架--Karate Karate是基于另一个BDD测试框架Cucumber来建立的,并且共用了一些相同的思想.其中之一就是使用Gher ...
- Cucumber(一): Preparation
Every time I wrote some code in ruby and executed our cucumber features I craved for something simil ...
- Cucumber语法及测试用例<一>
工作原因,最近一直在研究cucumber的 语法以及它和java之间的关系.鉴于是初学者且代码基础薄弱,我开始摸索前行,感谢分享博客且也在一路前行的人儿们. 1.基本语法为:此处举例两种区别一看即知- ...
- Cucumber命令行接口
1. cucumber的命令行选项 首先查看命令行选项.和其它命令行工具一样,cucumber提供了—help选项.下面是cucumber帮助的一个缩减版本: $ cucumber --help -r ...
随机推荐
- 1-13 RHEL7-硬盘介绍和磁盘管理
熟悉Linux平台下的存储介质,LVM逻辑卷.RAID 磁盘陈列等 大纲: 1-1 硬盘的分类及使用fdisk分区工具 1-1-1 认识硬盘的分类和特性.SCSI.IDE.SAS.SAT ...
- shiro权限定义的三种方法
1.在配置文件中定义 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFa ...
- 使用Unity创建塔防游戏(Part3)—— 项目总结
之前我们完成了使用Unity创建塔防游戏这个小项目,在这篇文章里,我们对项目中学习到的知识进行一次总结. Part1的地址:http://www.cnblogs.com/lcxBlog/p/60759 ...
- LeetCode OJ:Isomorphic Strings(同构字符串)
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- SpringXML方式配置bean的生命周期lifecycle
在Spring中容器在初始化某个bean的时候会有相应的生命周期,类似于Servlet,有相应的init,destory等方法 例如:如下service 1 2 3 4 5 6 7 8 9 10 11 ...
- win10下安装VS2005运行程序出现0x000007b错误的解决方法
项目工程一运行就报错...真心坑... 方法如下: 1.安装DirectX 9.0c 形成原因是因为DirectX 9.0被损坏, 只需要安装即可. 如果有电脑管家的.在电脑管家里面搜索“Direct ...
- Fiddler进行模拟Post提交json数据,总为null解决方式(转)
原文链接:http://www.cnblogs.com/jys509/p/3550598.html Request Headers: User-Agent: FiddlerHost: localhos ...
- Jxl的API概述(转)
一.Jxl的API Jxl的API主要有三个包,jxl,jxl.format,jxl.write.如果单独的分析API,可能对于更明确的了解此API没有太多的帮助,我们还是从Excel文件的层次来剥离 ...
- C与C++基础知识补遗
本随笔用来记载项目开发中遇到的以前没掌握的C/C++基础知识 void * buffer; 无类型指针,可以指向任何类型数据.ANSI标准规定无类型指针不能进行算法,而GNU规定无类型指针算法操作与c ...
- 获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf
转载请注明出处:windeal专栏 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq 结构体struct ifconf来获取网络接口的各种信息. ioctl 首先看 ...