Cucumber入门之Gherkin

简介:

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文件,我们就可以使用 cucumber 命令来运行它。如果cucumber命令后不跟任何东西的话,那么它会执行所有的.feature文件。如果我们只想运行某一个.feature文件,我们可以使用命令cucumber features\feature_name

 

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的同义词,如:”Given x, And y,” 这里的And就是Given的意思;再如:”Then x, But not y,” 这里的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        

 

 

 

注:本文内容来自《The RSpec Book》一书,本人只做记录,水平有限,如果需要可查看原版图书。



本文转自贺满博客园博客,原文链接:http://www.cnblogs.com/puresoul/archive/2011/12/28/2305160.html,如需转载请自行联系原作者。

目录
相关文章
|
12月前
|
存储 自动驾驶 测试技术
Mastering Makefile:模块化编程技巧与经验分享
在Linux项目管理中,Makefile是一个强大的工具,它可以帮助我们自动化编译和测试过程。然而,随着项目的增长,Makefile可能会变得越来越复杂,难以管理。在这篇文章中,我将分享一些模块化编程的技巧和经验,帮助你更好地管理你的Makefile。 使用反斜杠进行换行
97 0
|
Web App开发 测试技术 开发者
【Pyhton入门系列】第十三篇:Python自动化测试和单元测试
自动化测试是软件开发中不可或缺的一部分,它可以提高软件质量、减少人工测试工作量,并确保代码的稳定性。Python作为一种简洁而强大的编程语言,提供了丰富的测试框架和工具,使得自动化测试和单元测试变得更加容易。
115 2
|
监控 前端开发 Devops
Cypress简易入门教程(下)
Cypress简易入门教程(下)
257 0
|
资源调度 JavaScript 前端开发
Cypress简易入门教程(上)
Cypress简易入门教程(上)
488 0
|
自然语言处理 测试技术 数据库
|
移动开发 小程序 机器人
关于《自动化测试实战宝典:Robot Framework + Python从小工到专家》
互联网行业的工程师就好比运动员,要想在竞技场 上获胜,需要在训练场里长期刻苦地练习技巧,想要成为一个不被时代抛弃的技术人,就需要不断地更新迭代自己的知识体系。
1450 0
|
测试技术 持续交付 数据库

相关实验场景

更多