行为驱动开发 - Cucumber
Cucumber 是一个支持可执行规范、测试自动化和实时文档的工具。
行为驱动开发扩展了示例规范。 它还正式确定了测试驱动开发的最佳实践,特别是从外到内的工作视角。 开发工作基于可执行的规范。
可执行规范的主要特征如下 −
可执行规范是 −
源自代表系统行为的示例。
由所有参与开发的人员(包括企业和利益相关者)合作编写。
基于验收标准。
基于可执行规范的验收测试是自动化的。
使用一种共享的、普遍存在的语言来编写可执行规范和自动化测试,以便 −
在整个开发过程中使用领域特定术语。
每个人,包括客户和利益相关者,都以同样的方式谈论系统、其要求及其实施。
相同的术语用于讨论需求、设计文档、代码、测试等中存在的系统。
任何人都可以阅读和理解需求以及如何生成更多需求。
可以轻松适应更改。
维护实时文档。
Cucumber 有助于此过程,因为它将可执行规范与系统的实际代码和自动验收测试联系在一起。
它这样做的方式实际上是为了让客户和开发人员一起工作。 当验收测试通过时,意味着它所代表的系统行为规范已被正确实现。
典型的 Cucumber 验收测试
考虑以下示例。
功能 − 注册
注册应该快速且友好。
场景 − 注册成功
New(新)用户应该会收到一封确认电子邮件并受到亲自问候。
Given(鉴于)我已选择注册。
When(当)我使用有效详细信息注册时。
Then(那么)我应该会收到一封确认电子邮件。
And(而且)我应该看到一条个性化的问候消息。
从这个例子中我们可以看出 −
验收测试参考功能。
功能通过场景进行解释。
场景由步骤组成。
该规范以自然语言编写在纯文本文件中,但它是可执行的。
Cucumber 的工作原理
Cucumber 是一个命令行工具,它处理包含功能的文本文件,寻找可以针对您的系统执行的场景。 让我们了解一下 Cucumber 的工作原理。
它使用了一系列有关文件命名方式和文件所在位置(相应文件夹)的约定,以方便入门。
Cucumber 可让您将规范、自动化测试和文档保存在同一位置。
每个场景都是一个步骤列表,描述该场景的先决条件、操作和后置条件; 如果每个步骤执行时没有任何错误,则场景标记为通过。
运行结束时,Cucumber 将报告通过了多少个场景。
如果出现故障,它会提供有关失败原因的信息,以便开发人员可以继续进行。
在 Cucumber 中,功能、场景和步骤是用名为 Gherkin 的语言编写的。
Gherkin 是具有结构的纯文本英语(或 60 多种其他语言之一)。 Gherkin 易于学习,其结构允许您以简洁的方式编写示例。
Cucumber 执行包含用 Gherkin 编写的可执行规范的文件。
Cucumber 需要步骤定义来将纯文本 Gherkin 步骤转换为与系统交互的操作。
当 Cucumber 执行场景中的步骤时,它将查找匹配的步骤定义来执行。
步骤定义是一小段带有附加模式的代码。
该模式用于将步骤定义链接到所有匹配的步骤,代码是 Cucumber 在看到 Gherkin 步骤时将执行的代码。
每个步骤都附有一个步骤定义。
大多数步骤将收集输入,然后委托给特定于您的应用程序域的框架,以便在您的框架上进行调用。
Cucumber 支持十多种不同的软件平台。 您可以选择适合您的 Cucumber 实现。 每个 Cucumber 实现都提供相同的整体功能,并且它们还有自己的安装过程和特定于平台的功能。
映射步骤和步骤定义
Cucumber 的关键是步骤和步骤定义之间的映射。
Cucumber 实现
下面给出的是 Cucumber 实现。
Ruby/JRuby | |
JRuby (using Cucumber-JVM) | |
Java | |
Groovy | |
.NET (using SpecFlow) | |
JavaScript | |
JavaScript (using Cucumber-JVM and Rhino) | |
Clojure | |
Gosu | |
Lua | |
PHP (using Behat) | |
Jython | |
C++ | |
Tcl |
框架集成
下面给出的是框架实现。