Cucumber的简单讲解

Cucumber简单介绍

简介

cucumber 是一个能够理解用普通语言 描述的测试用例的行为驱动开发(BDD)的自动化测试工具,

其本质上是使用根据正则表达式匹配自然语言,然后依次执行对应的方法,以达到测试的目的。

优点:

  • 支持不同的语言,例如Java、.net、Ruby

  • 它充当业务与技术间桥梁的角色。可以通过在纯英文文本中创建一个测试用例来实现这一点。

  • 它允许在不知道任何代码的情况下编写测试脚本,它允许非程序员参与。

  • 由于简单的测试脚本架构,Cucumber提供了代码可重用性

组成

组成:Features、Step_definitions、Cucumber command

Features: 功能

  • 基于Gerkins. 支持多种语言,

  • 以.features命名

  • 每个features包含多个scenarios,每个scenarios包含多个step

Step_definitions

  • 根据feature文件中定义的step编写对应的测试代码。

Cucumber command

  • 运行:*.feature文件。cucumber会分析feature文件中定义的step,然后去step - definitions寻找相匹配的step,执行step中的代码。

  • 对于Cucumber而言,除了顶层的features文件夹是强制性的之外,其它目录结构都不是强制性的,Cucumber将对features文件夹下的所有内容进行扁平化(flatten)处理和首字母排序。具体来说,Cucumber在运行时,首先将递归的执行features文件夹下的所有Ruby文件(其中则包括Step文件),然后通过相同的方式执行Feature文件。但是,如果features文件夹下存在support子文件夹,并且support下有名为env.rb的文件,Cucumber将首先执行该文件,然后执行support下的其它文件,再递归执行featues下的其它文件

组件之间的工作原理如图:

 

 在Cucumber项目中,当我们执行cucumber命令时,会首先执行features/support目录下的几个支持文件:env,hooks,world和transforms。Cucumber的这些系统文件的执行顺序如下图所示:

Cucumber的简单讲解_第1张图片

  1. env.rb:通常用于准备环境变量;

  2. transforms.rb:用于转换feature描述中需要正则匹配的字符串,通过调用Cucumber::RbSupport::RbDsl的Transform方法,完成字符串到自定义类型的转换;

  3. hooks.rb:是一个钩子,其中定义了Before、After与at_exit方法,通过提供block执行场景前、后以及退出执行后的相关逻辑

  4. world.rb:World可以看做是Cucumber在每个场景之前所要创建的对象的实例,它使得每一个Step Definition可以调用该实例的方法。World在Cucumber中被定义为方法,接受可变参数mudules,以及一个proc

Gerkin( cucumber的语言输出)

Gherkin是自然语言测试的简单语法。一个完整的测试是由多个step组成的,step即最小单元,如何复用step是非常关键的问题。多个step组成一个Scenario,即一个完整的测试case。多个Scenario组成一个Feature,即一组相关的测试case。

关键字

  • Feature

  • Example(or Scenario)

  • Given,When,Then,And,But(steps)

  • Background

  • Scenario Outline (or Scenario Template)

  • Examples (or Scenarios)

它们的含义与原有自动化测试工具中的概念相同,类比如下:

Cucumber Unit Test
Feature (功能) test suite (测试用例集)
Scenario(情景) test case (测试用例)
Given(给定) setup(创建测试所需环境)
When(当) test(触发被测事件)
Then(则) assert(断言,验证结果)

简单例子

cucumber --init
  create   features
  create   features/step_definitions
  create   features/support
  create   features/support/env.rb

Test.feature

 

其他

多组数据测试

实现多组数据的测试要用到Scenario Outline和Examples这一对关键字

钩子

在很多情况下,我们需要在每个scenario之前(before)和之后(after)执行某些相同的操作

Before: 在每个scenario前执行

After: 在每个scenario后执行

AfterStep: 在每个scenario后执行

我们可以把这些hooks放在features文件夹下面的任何ruby文件里面,但一般推荐的做法是把它们放在features/support/hooks.rb 文件里

另外,Hooks可以被定义任意次。如果在每个scenario之前有十件不同的事需要我们去处理,我们可以定义十个Before 钩子(hooks),他们会按定义的顺序去执行

背景

一般情况下,background代替Before钩子,它们可以为每个scenario创建逻辑的上下文。

Background会在每个scenario之前执行,就像Before钩子一样。但如果存在Before 钩子,那个它们会先于background执行。

当我们有相同的操作时,为了遵守DRY原则,我们可以选择hooks或background。至于选择哪一种方式,取决于当它们明确的出现在feature文件里是否有价值。

 

Cucumber常见指令

  1. --i18n help #查看支持的语言 —高版本cucumber不支持,当前2.4.0版本支持,2.99.0版本不支持

​ --i18n zh-CN #查看语言支持的关键字 zh-CN, en

  1. -t, --tags TAG_EXPRESSION

    cucumber --tags @add --tags @two,@three

3.-d, --dry-run

​ 执行feature文件而不执行steps,仅校验了feature的语法

  1. -l, --lines LINES

    执行指定行对应的用例

  2. -f, --format FORMAT

  3. -o, --out [FILE|DIR]

    文件输出

你可能感兴趣的:(自动化相关)