《Cucumber:行为驱动开发指南》——1.4 Cucumber如何工作

1.4 Cucumber如何工作

在深入本书的核心内容之前,我们先简要介绍一个典型的Cucumber测试集,以帮助你了解Cucumber是如何工作的。

Cucumber是一个命令行工具。运行时它会从普通语言编写的称为特性(feature)的文本文件中读取你的规格说明,解析需要测试的场景(scenario),然后针对你的系统运行这些场景以达到测试的目的。每个场景由一系列步骤(step)组成,Cucumber会一步步执行这些步骤。为了让Cucumber能理解特性文件,这些文件必须遵循一些基本的语法规则,这套语法规则就叫Gherkin。

除了特性文件,你还要为Cucumber提供一组步骤定义(step definition),它们是匹配特性文件中每个步骤的Ruby代码,业务语言描述的步骤行为都由这些步骤定义执行。在一个成熟的测试集中,这些步骤定义自身可能只包含一两行Ruby代码,具体的工作都代理给支持代码(support code)库来完成,应用程序领域特定的支持代码库知道如何执行系统的常见任务。通常这会涉及使用一个自动化库(automation library),例如浏览器自动化库Capybara,来与待测系统进行交互。

整个层次结构从特性往下至自动化库,具体如图1-1所示。

图1-1 Cucumber测试栈

如果步骤定义中的Ruby代码执行无误,Cucumber就依次执行场景中的下一个步骤。如果场景的所有步骤执行都没有错误,那么Cucumber就将该场景标记为通过。但是,如果场景中任何一个步骤失败了,Cucumber就会将该场景标记为失败并转而执行下一个场景。运行场景的时候,Cucumber打印出相应的结果,告诉你它在干什么,以及它没干什么。

简单来说 Cucumber 就是这么一回事。但作为一个杰出的自动化验收测试框架,Cucumber 还有很多其他优点:你可以使用四十多种语言编写规格说明,可以使用标签(tag)把场景组织和归类,可以轻松集成大批高质量的 Ruby 自动化库,来驱动几乎任何种类的应用程序。随着阅读本书的其他部分,所有上述及更多的内容都将清晰地展现在你面前。

时间: 2024-10-03 03:28:33

《Cucumber:行为驱动开发指南》——1.4 Cucumber如何工作的相关文章

“Cucumber行为驱动开发指南”能带给我们什么

介绍 或许你已经了解到了软件开发中一个头疼的事,就是如何产生正确的需求和围绕这些需求如何有效地进行软件开发?但又不知如何着手? 或许你已经了解到了一些相关的理论知识来解决这个难题,如:行为驱动开发(BDD),验收测试驱动开发(ATDD),实例化需求(Specification By Example),但却发现很难消化所有的信息? 或许你已经建立了一套相关的自动化测试,但总觉得在为测试而测试,没有解决实际问题,有点脱钩? 或许你已经开始着手建立自动化测试来做保障,但对那么多的工具无从选择? 也或许

《Cucumber:行为驱动开发指南》——第1章 为何使用Cucumber 1.1自动化验收测试

第1章 为何使用Cucumber 软件始于一个想法. 我们假设这是一个优秀的想法--一个能让世界变得更加美好,或者至少能让一些人赚到一些钱的想法.而软件开发人员所面临的挑战就是要落实这个想法,使其能真正产生效益. 最初的想法是完美.漂亮的.如果拥有该想法的人碰巧是一个天才软件开发人员,那事情就非常简单了:他无须向任何人解释就能直接把想法实现成可工作的软件.然而更常见的情况是,拥有最初想法的人并不具备使其想法变为现实所必需的编程技能,因此这个想法必须从他的脑中传递到另外一些人的脑中.也就是说,相关

《Cucumber:行为驱动开发指南》——1.2 行为驱动开发

1.2 行为驱动开发 行为驱动开发(Behaviour-Driven Development,BDD)1建立于测试驱动开发的基础之上,它标准化了那些优秀TDD实践者的良好习惯.优秀的TDD实践者以自外向内的方式开发软件,最初他们会编写一个失败的客户验收测试,该测试从客户的视角描述系统的行为.作为BDD实践者,我们细心编写验收测试,作为所有团队成员都能读懂的实例.我们使用这个编写实例的过程来获取业务人员的反馈,以便在开始实现软件之前,我们就知道自己是否是在编写正确的软件.在此过程中,我们会主动开发

《Cucumber:行为驱动开发指南》——6.3 照管好你的测试

6.3 照管好你的测试 自动化特性的好处在于你可以把它们作为活文档来长期信赖,因为你会将每一个场景都用于检查产品代码,以确保它们仍然有效.对于同代码打交道的程序员来说,这还有另一件好处:在他们开发系统的时候,那些测试可以充当安全网,对任何破坏已有行为的错误都给出警告. 因此,你的特性可以充当一种反馈机制,对整个团队来说提供关于系统行为的反馈,对程序员来说还能提供是否破坏已有行为的反馈.想让这些反馈循环带来好处,测试需要执行迅速,还需要可靠.我们首先来看看影响测试可靠性的问题.6.3.1 渗露的场

《Cucumber:行为驱动开发指南》——2.9 我们学到了什么

2.9 我们学到了什么 在本章中我们快速浏览了许多不同的内容,所有这些内容都会在后面再次详细介绍,现在来做一个简单的小结并强调几个最重要的地方. 2.9.1 目录结构Cucumber希望你用约定的目录结构来存储特性和步骤定义: features/ adding.feature - step_definitions/ calculator_steps.rb - 如果你真的需要,也可以传递参数给Cucumber,从而改变默认结构,优先使用自己指定的目录结构,但这种按约定存储文件的方法是最简单的. 2

《Cucumber:行为驱动开发指南》——2.3 创建步骤定义

2.3 创建步骤定义 先不要过多考虑之前Cucumber输出的代码片段是什么意思,我们先把这些代码复制并粘贴到一个Ruby文件中.和特性文件一样,Ruby期望在约定俗成的位置找到步骤定义: $ mkdir features/step_definitions现在在fetures/step_definitions目录下创建一个名为calculator_steps.rb的文件,只要这是一个Ruby文件,Cucumber并不介意你给这个文件起什么名字,但这里我们给这个文件起的名字其实不错.接着用编辑器打

《Cucumber:行为驱动开发指南》——2.8 让测试通过

2.8 让测试通过 既然已经有了可靠的失败场景,那就是时候让这个Cucumber场景指导我们编写解决方案了. 有一个非常简单的方案能让测试通过,但该方案其实不会有实际的帮助,不管怎样我们先试一下,哪怕为了好玩儿: 下载first_taste/08/calc.rb print "4" 试试运行cucumber,你会看到场景最终通过了: ... 1 scenario (1 passed) 3 steps (3 passed) 0m0.025s 很好!不过这个方案有什么问题呢?毕竟我们说过希

《Cucumber:行为驱动开发指南》——第6章 Cucumber常见问题及解决之道 6.1感受痛苦

第6章 Cucumber常见问题及解决之道 如果团队是第一次用Cucumber,用不了多久你就会注意到自己写的代码bug比以前少了.你发现自己可以勇敢地重构那些以前碰都不敢碰的代码.看到自己的第一个场景通过时的那种喜悦,鼓舞着你不断添加一项又一项特性. 然而,一段时间后,事情开始变味了.突然间你发现测试运行的时间实在太长:或者你开始注意到有几个场景会随机地失败,而且通常是在紧张的工期已经临近的时候:也可能不懂技术的利益相关人对这种开发过程兴趣渐失,只剩下开发人员还在阅读那些特性.人们甚至开始问这

《Cucumber:行为驱动开发指南》——6.2 同心协力

6.2 同心协力 6.2.1 偶然细节考虑下面这个为在线邮件客户端编写的场景: Scenario: Check inbox Given a User "Dave" with password "password" And a User "Sue" with password "secret" And an email to "Dave" from "Sue" When I sign in

《Cucumber:行为驱动开发指南》——2.1 理解我们的目标

第2章 Cucumber初体验 我猜你已经等不及要立刻试试自己的"新玩具"了,下面我们通过一个简单的例子来体会一下使用Cucumber工作是怎样的感觉.在此过程中你也许无法完全理解其中的某些部分,但不必担心,接下来的几章我们会回过头来补充相应的细节. 我们将以由外向内的方式构建一个简单的命令行应用程序,整个开发过程由Cucumber驱动.注意我们是如何小步前进的,每次修改之后我们都会回头运行一下 Cucumber.这种不厌其烦的节奏对于有效使用Cucumber非常重要,关于这一点,实际