📜  行为驱动开发-Cucumber

📅  最后修改于: 2021-01-18 05:35:54             🧑  作者: Mango


Cucumber是支持可执行规范,测试自动化和Living文档的工具。

行为驱动开发通过示例扩展了规范。它还规范了测试驱动开发的最佳实践,尤其是从外而内进行工作的观点。开发工作基于可执行规范。

可执行规范的主要功能如下-

  • 可执行的规格是-

    • 从代表系统行为的示例派生。

    • 与所有参与开发的人员(包括业务和利益相关者)合作编写。

    • 基于验收标准。

  • 基于可执行规范的验收测试是自动化的。

  • 使用一种共享的无处不在的语言来编写可执行的规范和自动测试,以便-

    • 在整个开发过程中都使用领域特定的术语。

    • 包括客户和利益相关者在内的每个人都以相同的方式谈论系统,其要求及其实施。

    • 相同的术语用于讨论需求,设计文档,代码,测试等中存在的系统。

    • 任何人都可以阅读和理解需求以及如何生成更多需求。

    • 更改很容易适应。

    • 实时文档得到维护。

Cucumber将可执行规范与系统的实际代码和自动验收测试联系在一起,从而为该过程提供了帮助。

实际上,这样做的目的是让客户和开发人员一起工作。当验收测试通过时,表示它所代表的系统行为规范已正确实施。

典型黄瓜验收测试

考虑以下示例。

功能-注册

  • 注册应该快速友好。

  • 方案-成功注册

    • 用户应收到确认电子邮件并亲自打招呼。

    • 鉴于我已选择注册。

    • 我使用有效的详细信息进行注册时。

    • 然后,我应该收到一封确认电子邮件。

    • 看到一个个性化的问候信息。

从这个例子中,我们可以看到-

  • 验收测试是指功能

  • 功能由场景说明。

  • 方案包括步骤

该规范以自然语言编写在纯文本文件中,但是可以执行。

黄瓜的工作

Cucumber是一种命令行工具,用于处理包含功能的文本文件,以查找可以针对您的系统执行的方案。让我们了解黄瓜的工作原理。

  • 它利用了一系列有关文件的命名方式以及它们位于何处(各自的文件夹)的约定,使入门变得容易。

  • Cucumber使您可以将规格,自动化测试和文档保留在同一位置。

  • 每个方案都是描述该方案的前提条件,操作和后置条件的步骤的列表。如果每个步骤的执行没有任何错误,该方案将标记为已通过。

  • 运行结束时,Cucumber将报告已通过多少个方案。

  • 如果某件事失败,它会提供有关失败原因的信息,以便开发人员可以继续前进。

在Cucumber中,功能场景和步骤以称为Gherkin的语言编写。

小黄瓜是具有结构的纯文本英语(或60多种其他语言之一)。 Gherkin易于学习,其结构使您可以简洁地编写示例。

  • 黄瓜执行包含以Gherkin编写的可执行规范的文件。

  • Cucumber需要“步骤定义”,以将纯文本的“小黄瓜步骤”转换为将与系统交互的动作。

  • 当Cucumber在场景中执行步骤时,它将寻找要执行的匹配步骤定义。

  • 步骤定义是一小段代码,上面附加了一个模式。

  • 该模式用于将“步骤定义”链接到所有匹配的步骤,并且代码是Cucumber看到小黄瓜步骤时将执行的代码。

  • 每个步骤都有一个“步骤定义”。

  • 大多数步骤将收集输入,然后委派给特定于您的应用程序域的框架,以便在您的框架上进行调用。

Cucumber支持十几种不同的软件平台。您可以选择适合您的Cucumber实现。每个Cucumber实施都提供相同的总体功能,并且它们还具有自己的安装过程和特定于平台的功能。

映射步骤和步骤定义

黄瓜的关键是步骤和步骤定义之间的映射。

映射步骤

黄瓜实施

下面给出的是黄瓜实现。

Ruby/JRuby Ruby/JRuby
JRuby JRuby (using Cucumber-JVM)
Java Java
Groovy Groovy
NET .NET (using SpecFlow)
JavaScript JavaScript
JavaScript JavaScript (using Cucumber-JVM and Rhino)
Clojure Clojure
Gosu Gosu
Lua Lua
PHP PHP (using Behat)
Jython
C++ C++
Tcl Tcl

框架整合

以下是框架的实现。

Ruby on Rails Ruby on Rails
Selenium Selenium
PicoContainer PicoContainer
Spring Framework Spring Framework
Watir Watir