大家好,我是神韵,是一个技术&生活博主。出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己。二是希望我的文章可以帮到大家。欢迎来点赞打卡,你们的行动将是我无限的动力。
本篇主题是:什么是BDD、Cucumber?它们的关系是什么?
下面我将简单介绍一下BDD和Cucumber两个概念以及它们的关系
一、什么是BDD?
BDD全称是Behaviour-Driven Development,即行为驱动开发,下面是官网的介绍
What is BDD?
BDD is a way for software teams to work that closes the gap between business people and technical people by:
- Encouraging collaboration across roles to build shared understanding of the problem to be solved
- Working in rapid, small iterations to increase feedback and the flow of value
- Producing system documentation that is automatically checked against the system’s behaviour
We do this by focusing collaborative work around concrete, real-world examples that illustrate how we want the system to behave. We use those examples to guide us from concept through to implementation, in a process of continuous collaboration.
对应中文:
BDD 是软件团队的一种工作方式,它通过以下方式缩小业务人员和技术人员之间的差距:
- 鼓励跨角色协作,以建立对要解决的问题的共同理解
- 以快速、小规模的迭代工作,以增加反馈和价值流
- 生成根据系统行为自动检查的系统文档
为此,我们将协作工作集中在具体的、真实的示例上,这些示例说明了我们希望系统如何运行。在持续协作的过程中,我们使用这些示例来指导我们从概念到实施。
BDD-行为驱动开发官网介绍非常难懂抽象的概念,特别是对没有用过这种工作方式来说,那根本就是一头雾水
我们对最后一句话进行解读,可分将BDD分为以下三个步骤
- 先描述产品行为(将协作工作集中在具体、真实的示例上)
- 产品行为其实就是提供自动化步骤(希望系统如何运行)
- 编写产品代码,以使得它能够通过行为的自动化测试(使用示例来指导我们从概念到实施)
上述三个步骤即整个流程中,产品代码的开发--步骤3,都是由行为驱动的--步骤1。因此,我们将这个流程,称之为行为驱动开发(Behavior driven development)
此外还要强调,BDD 是软件团队的一种工作方式,一种软件开发的过程,是关于发现、协作和示例,它具体实现是需要一些框架或者工具,比如Cucumber就支持BDD
当然,文字都是比较抽象的描述,如果用例子表述,那肯定就不会那么抽象。在介绍Cucumber第一个例子时,我顺带说明一下BDD(待补充..)
二、什么是Cucumber?
什么是黄瓜,主要有三步介绍,一是对Cucumber的介绍,而是对它的语法Gherkin介绍,最后是对它的编码步骤定义Step Definitions介绍。
编写Cucumber过程,需要一个编写一个由Gherkin语言编写的可执行规范文件叫xx.feature(由测试case组成),这个文件就是BDD中的行为,然后由行为-feature驱动编码,即编写Step Definitions,编写Step Definitions由行为驱动的编码,整个过程就是BDD,然后需要提供一个主类启动类即可运行所有xx.feature写好的Case。(过程简化为编写xx.feature,编写Step Definitions,编写启动类)
下面是官网对Cucumber的介绍
好的,既然您知道 BDD 是关于发现、协作和示例(而不是测试),那么让我们来看看 Cucumber。
Cucumber 读取以纯文本形式编写的可执行规范,并验证该软件是否按照这些规范的要求进行操作。规范由多个示例或场景组成。例如:
Scenario: Breaker guesses a word Given the Maker has chosen a word When the Breaker makes a guess Then the Maker is asked to score
每个场景都是Cucumber 需要完成的步骤列表。Cucumber 验证软件是否符合规范,并为每个场景生成一个报告,指示 ✅ 成功或 ❌ 失败。
为了让 Cucumber 理解这些场景,它们必须遵循一些基本的语法规则,称为Gherkin。
上面提到的Gherkin就是编写Cucumber的语法,下面是官网的介绍
What is Gherkin -- 什么是小黄瓜?
Gherkin 是一组语法规则,使纯文本的结构足以让 Cucumber 理解。上面的场景是用 Gherkin 编写的。
小黄瓜有多种用途:
- 明确的可执行规范
- 使用 Cucumber 进行自动化测试
- 记录系统的实际行为方式
下面是步骤定义介绍
What are Step Definitions -- 什么是步骤定义?
将 Gherkin 步骤连接到编程代码。步骤定义执行该步骤应执行的操作。因此,步骤定义将规范硬连接到实现。
┌────────────┐ ┌──────────────┐ ┌───────────┐ │ Steps │ │ Step │ │ │ │ in Gherkin ├──matched with──>│ Definitions ├───manipulates──>│ System │ │ │ │ │ │ │ └────────────┘ └──────────────┘ └───────────┘
步骤定义可以用多种编程语言编写。这是一个使用 JavaScript 的示例:
When("{maker} starts a game", function(maker) { maker.startGameWithWord({ word: "whale" }) })
总结:
Cucumber 是一个支持行为驱动开发(BDD)的工具,一个测试框架
BDD 是软件团队的一种工作方式,一种软件开发的过程,是关于发现、协作和示例,但不是测试工具、框架,就是一种概念性的东西。而Cucumber是支持BDD的一个测试类框架、工具,也就是用Cucumber可以达到BDD的行为驱动开发的效果。