cucumber黄瓜入门


备注

关于黄瓜

Cucumber是一个运行可执行软件规范的工具。称为“功能”的规范是用结构化的自然语言编写的。 Cucumber通过将每个步骤映射到用Cucumber实现支持的编程语言编写的“步骤定义”来执行特征。 Cucumber以许多编程语言实现, 包括Ruby(原始),Java和Javascript 。它也被翻译成许多人类语言。

编写Cucumber是为了支持称为行为驱动开发(BDD)的敏捷方法。在BDD中,通过编写验收测试从外部开始开发,这些测试从用户的角度描述软件的功能(而不是从程序员的角度来看,例如在单元测试中)。黄瓜特征作为这些验收测试。

一般来说,Cucumber功能是人类可读的文档,也是一个可执行的测试套件,这意味着文档和测试总是一致的。黄瓜在与非程序员利益相关者沟通文档和测试方面很有用。它还允许程序员在概念级别编写测试,而不会产生无关的编程语言问题。

Cucumber最常用于使用浏览器驱动程序(如Selenium或PhantomJS)指定和测试Web应用程序。但是,它可以与任何可以执行的软件一起使用,其状态或结果可以从Cucumber实现支持的编程语言中确定。

其他文件

官方文档位于https://cucumber.io/docs 。从描述Cucumber实现的Cucumber特性生成的文档是

https://relishapp.com/explore包含一些其他与Cucumber相关的工具和示例,但不幸的是,Cucumber-JVM。

这个话题

本主题仅举几个例子,向读者介绍Cucumber的概念。其他部分将提供安装,命令行和IDE使用,功能,步骤定义等的完整示例。

黄瓜特色

Cucumber使用Gherkin语法来描述您的软件在结构化自然语言中的行为。

因此,Cucumber 不是一个测试框架(一个常见的误解),而是一个系统文档框架 ,与Use Case Scenario等其他框架没有太大区别。常见的误解是由于Cucumber文档可以自动化以确保它反映真实的系统行为

Cucumber文档套件由Features 组成,每个Features 都描述了软件的功能,用Gherkin编写并托管在自己的文件中。通过将这些文件组织到目录结构中,您可以对功能进行分组组织

  • 银行业/
    • withdrawal.feature
    • atm.feature
    • 个人loan.feature
  • 贸易/
    • portfolio.feature
    • intraday.feature
  • 抵押/
    • evaluation.feature
    • accounting.feature

每个Feature 都是一个纯文本文件,由可选的,非结构化的纯信息介绍部分和一个或多个Scenarios ,每个Scenarios 代表一个使用条件或用例。

例:

Feature: Documentation
As a StackOverflow user or visitor
I want to access the documentation section
    
    Scenario: search documentation on Stack Overflow
        Given I am on StackOverflow
        And I go to the Documentation section
        When I search for "cucumber"
        And I follow the link to "cucumber"
        Then I should see documentation for "cucumber"
 

GivenWhenAndButThen开头的每一行称为Step 。任何步骤都可以从任何这些单词开始,无论顺序如何,但通常以最自然的方式使用它们。

还可以通过Tags ,编辑器可以放置在FeatureScenario 上的注释来组织Feature ,以进一步对其进行分类。

通过胶水代码实现功能的可执行性, 胶水代码可以用许多不同的语言(Java,Ruby,Scala,C / C ++)编写:每个Step 与胶水代码匹配,以识别Step Definitions (通常缩写为StepDef )常用表达。

每个Step 只能有一个关联的Step Definition

Feature 被执行的各构成Scenario 被执行,这意味着每个StepDef匹配Step 在每S Scenario 被执行。

Ruby中的Cucumber步骤定义

在features / step_definitions / documentation.rb中:

When /^I go to the "([^"]+)" documentation$/ do |section|
  path_part =
    case section
      when "Documentation"
        "documentation"
      else
        raise "Unknown documentation section: #{section}"
    end
  visit "/documentation/#{path_part}/topics"
end

Then /^I should see the "([^"]+) documentation"$/ do |section|
  expect(page).to have_css('h2.doctag_title a', text: section)
end
 

这些步骤执行Web应用程序。它们尽可能简单,同时仍然实用。

每个步骤都以Gherkin关键字开头,该关键字在步骤定义文件中是一个向Cucumber注册步骤的方法。步骤定义方法采用与场景中的线匹配的正则表达式和在场景到达匹配线时执行的块。正则表达式中的捕获组作为块参数传递给块。

When 步骤有一个简单的内联示例,从人类可读的引用到页面(“文档”)到URL。 Real Cucumber套件通常将此逻辑放在一个单独的方法中。 visit 方法由Capybara提供。 Capybara不需要使用Cucumber,尽管它非常常用。 visit 告诉Capybara控制的浏览器访问给定的URL。

Then 步骤显示如何测试页面的内容。 expect / to 由RSpec的提供(再次,没有要求黄瓜,但很常用它使用)。 have_csshave_css 提供。期望是给定的CSS选择器匹配包含给定文本的页面上的元素。请注意,如果浏览器请求失败,此期望将失败。

有关更多示例,请参阅“步骤定义”主题

纯Ruby安装

要安装Cucumber以与Ruby一起使用,只需使用该命令即可

gem install cucumber
 

或者,如果您使用的是bundler,则可以将以下行添加到Gemfile中

gem 'cucumber'
 

然后运行bundler

bundle install
 

[我认为这属于它自己的主题,安装。我创建了该主题并在那里复制了这个例子。当该主题获得批准后,我会将其移到那里并删除副本。]