前言
由于项目准备使用BDD模式开发,所以最近在学习BDD,同时也记录下自己的学习点滴。
参考原文:https://github.com/cucumber/cucumber/wiki/Gherkin
 
Gherkin是什么
Gherkin,Cucumber解释器可以理解的语言。这是一个商业可读性,领域特定语言,描述软件的行为而不需要关心这个行为的如何实现的。
 
Gherkin有两个目的 - 文档和自动化测试。第三个额外特色:当它被标记为红色叉叉时,让你知道接下来的代码如何写。
 
Gherkin的语法定义为Treetop语法(Treetop——基于Ruby的PEG解析器生成器)所以可以被Cucumber解释执行(Cucumber是一个解释程序,就像ruby命令执行解释 .rb文件里的Ruby代码一样,Cucumber用来执行解释 .feature文件里的Gehrkin代码。)。该语法适用在不同的语言中,让您的团队可以使用自己的语言中的关键字。
 
个人理解:
Gherkin是一种语法,使用 Given,when,then等关键来描述一个User Story。形成的代码不论是User,BA都能读懂的形式,同时也非常便于使用specflow转化成BDD所需要的文件。
 
通用约定
->Gherkin的单个文件包含对一个功能点的描述
->源文件使用.feature 作为扩展名
 
Gherkin语法
像Python和YAML,Gherkin是一种面向行的语言,使用缩进来定义结构。行结尾终止语句(例如,步骤)。空格或制表符可用于缩进(但空格更方便些),每一行以关键字开始。
 
注释允许出现在文件的任何一行,但是要以‘#’开始,仅支持单行注释。
 
当你开始运行一个行为时,feature关键字的后面部分,也就是详细步骤,这是一段Ruby风格的代码片段,会被解析器分析出所有的功能,情景和步骤。
 
Gherkin文件格式如下:

 : Feature: Some terse yet descriptive text of what is desired
: In order to realize a named business value
: As an explicit system actor
: I want to gain some beneficial outcome which furthers the goal
:
: Scenario: Some determinable business situation
: Given some precondition
: And some other precondition
: When some action by the actor
: And some other action
: And yet another action
: Then some testable outcome is achieved
: And something else we can check happens too
:
: Scenario: A different situation
: ...

一个文件中允许出现多个 Scenario段

 
园子有人对Gherkin的语法也有很详细的解释建议进一步阅读:http://www.cnblogs.com/puresoul/archive/2011/12/28/2305160.html
 
 
建议阅读:
 
扩展阅读:
 
欢迎斧正,定当虚心改正。
 
题外话:
demo正在制作中,后续就在学习BDD中遇到的问题也会分享出来。
 

Gherkin学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. [LeetCode] 86. Partition List 解题思路

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  2. 交叉编译中的 --sysroot 等等在编译时的作用

    --sysroot=dir 的作用 如果在编译时指定了-sysroot=dir 就是为编译时指定了逻辑目录.编译过程中需要引用的库,头文件,如果要到/usr/include目录下去找的情况下,则会在前 ...

  3. mysql 备份与还原

    http://dev.yesky.com/281/35291281.shtml 每一种逻辑错误发生的概率都极低,但是当多种可能性叠加的时候,小概率事件就 放大成很大的安全隐患,这时候备份的必要性就凸显 ...

  4. 《神经网络和深度学习》系列文章三:sigmoid神经元

    出处: Michael Nielsen的<Neural Network and Deep Leraning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 徐伟 ...

  5. cocos2d-x 关于opengl version too old 问题解决办法

    转载请注明出处 http://blog.csdn.net/u010229677/article/details/9704961 今天cocos2d-x突然出现这个对话框,去国外论坛找的解决办法.折腾许 ...

  6. HDU 5750 Dertouzos

    Dertouzos Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  7. MISCONF Redis is configured to save RDB snapshots

    今天客户突然反馈用我们的api出现了下面的这个错误 MISCONF Redis is configured to save RDB snapshots, but is currently not ab ...

  8. android账号与同步之同步实现

    上一篇博文我先介绍了账号与同步的账号管理,这篇就介绍一下还有一部分.就是android给提供的sync同步机制的使用. 事实上sync机制的使用和上一篇博文中介绍的账号管理非常类似,也是基于binde ...

  9. ACM 关于数据输入加速

    转载请注明出处:http://blog.csdn.net/a1dark 分析:我们都知道运行时间对我们来说很重要.有时候不惜用大量的内存去换取一点时间.有些人可能都比较关注这个问题.首先时间上:cin ...

  10. php通过文件头检测文件类型通用类(zip,rar…)(转)

    在做web应用时候,通过web扩展名判断上存文件类型,这个是我们常使用的.有时候我们这样做还不完善.可能有些人上存一些文件,但是他通过修改 扩展名,让在我们的文件类型之内. 单实际访问时候又不能展示( ...