大家好!我是虫兵 ~
一个近 10 年经验的测试开发工程师
擅长自动化体系建设与 devops !
如果我的文章对你有帮助,可以点个关注奥 !
BDD 简介
要想学习 behave 我们必须要了解他的历史,也就是behave 是怎么来的呢?那就要从 BDD 开始聊起。什么是BDD呢?如下
Cucumber 官网
BDD 侧重于通过与利益相关者的讨论获得对所需软件行为的清晰理解。它通过用非程序员可以阅读的自然语言编写测试用例来扩展 TDD。行为驱动开发人员使用他们的母语与领域驱动设计的普遍语言相结合来描述他们代码的目的和好处。这允许开发人员专注于为什么要创建代码,而不是技术细节,并最大限度地减少编写代码的技术语言与业务、用户、利益相关者、项目管理等所使用的领域语言之间的翻译.
Cucumber 官网
以上内容来自官网的一些介绍,如果想了解更细大家就直接读官网去学习BDD更多理论知识:https://docs.cucumber.io/docs/bdd/。在本篇不是重点。
官方给了以上解释,那么作者用大白话给不太理解各位再简单说一下其实,BDD 也是随着敏捷研发 兴起提出的新概念,敏捷开发大家知道里面涉及角色很多有产品、项目管理、研发、测试等更多强调的是多角色的协作,BDD是由业务驱动,用户通过UI上的元素点击和其他元素交互最终完成一个业务,所以为了让用户的每一步操作都可以快速获得反馈,那么就有了行为驱动测试框架 Cucumber 的产生了。
本文背景及目标
本文是一个系列文章,背景是因为作者公司最近的自动化测试项目最终调研方案采用的就是 Cucumber,由于我们项目代码是python语言用,所以我们也是 python 语言开发采用的是behava 框架来实现的。behave 的官网教程文档作者感觉写的不是很清晰很多用法也没有给 demo,所以很难受。于是 就有了写这个系列文章的想法,主要目的也是给再用或者即将 behave 框架的人做一个补充参考资料,希望通过本系列文章可达到直接上手 behave 的目的。
每篇文章的末尾作者都设计了几道课后题,
如果你能正确作答课后题那么就达到学习目标了!
一起学起来吧!!
学习完后可以收货什么
- 对于正在调研学习 Cucumber 框架的工程师可以起到入门作用
- 对于已经选型 behave 的工程师可以通过本系列文章快速上手
print ("欢迎大家一起学习交流")
print ("VX:1010584905")
学习behave 前需掌握的知识点
什么是Cucumber?
Cucumber 上文说了是基于BDD理念衍生出来的一个自动化测试框架,(你就可以简单理解为单元测试概念衍生的测试框架 Java 有 Junit,testng ,python 有 pytest 等) Cucumber 流程大概就是读取一些文本编写的规范文件,然后验证这些规范是否符合编写的要求,这些规范编写是由固定编写规则和特殊语法必须按着这种规则语法写,Cucumber 才能识别。举个例子如下:
Scenario: 验证一个接口返回内容是否符合预期
Given 请求接口“api/getAccountInfo”
When 发送GET请求
Then 返回用户信息包含名字为“allen”年龄是“29”岁
上文每个场景(Scenario)包含多个步骤列表,这些列表中有一些关键字描述(Given\When\Then),Cucumber 严格执行看每行是否符合描述预期然后会生成一个报告,每个场景(Scenario)通过 ✅ success or ❌ failure来标识。
那么以上文字描述看起来是不是怪怪的,这种怪怪的描述就叫做 Gherkin.
什么是Gherkin?
Gherkin 是由一组纯文本描述的结构为了让Cucumber可以读懂的自然语言。这种语法在许多不同国家都有不同的表现形式,所以你的团队可以使用属于你们自己语言的关键词。
Gherkin 语言描述的文档一般都是保存在一个.feature 文件中(如图),通常这个文件是和你的源代码一块进行版本管理,但是其实作者我来说如果你的项目够大协作人够多,其实我是推荐分开管理,也就是case 和 框架分离。可以做成平台化管理。
python 在Cucumber 中的作用?
python 在 Cucumber 中的作用其实很好理解了,在实际项目中我们的编程语言众多。迄今为止 Cucumber 对绝大多数编程语言都有对应实现框架的支持(如图),Cucumber 官方推荐选择哪种语言的实现框架和你被测的项目最好保持一致,作者认为有几个原因吧,这要追溯到最初Cucumber 问世是为了多角色协同,所以是希望 RD 同学也可以参与到自动化建设当中,那么就需要和被测项目保持一致了,如果你的被测项目是 Java 语言开发, 你用 python 搞了一套自动化框架,那么显然对于RD来说是有学习成本的是不利于合作的。
这里面:
- 绿色 是官方托管的,也就是在官方的 Cucumber 工程目录下,由官方实现并维护
- 蓝色 是半官方,托管在其他地方但是用的是 Cucumber 的组件
- 黑色 非官方的,托管在其他地方也没有用官方任何组件,说白了,自己实现的这套东西,也能解析 Gerken 描述的case。
- 红色 官方实现 但没有维护的就等着你去维护呢 !!!!!!!!!!!
behave在Cucumber 中的作用?
behave是一个python语言的一个BDD测试框架,说白了是对Cucumber 这套东西的一个封装吧,你可以使用python 语言的 behave 框架去实现测试你的项目, 其实最终去解析用Gerkin 描述的case的就是behave 。
知识点总结
- BDD 是行为驱动开发,是敏捷开发衍生出的一种概念,强调多种角色的顺畅协作
- Cucumber 是基于 BDD 实现的一套行为驱动测试框架,支持多种编程语言
- python 是 Cucumber 支持多种编程语言中的一种
- Gherkin 是支持由一种支持纯文本方式描述的自然语言,通过这种自然语言描述 Cucumber 框架才可以读懂
- behave 是基于 python 语言对Cucumber 实现的一个真正的实例,具体解析语言描述的 case,每个编程语言不一样而 python 靠的就是 behave.
课后题
# 本文学习的目标
print("通过本章了解什么是BDD?")
print("什么是Cucumber ?")
print("Cucumber 、Gherkin、python、behave 的意关系是什么?")
下期预告
Gherkin 是学习 behave 的一个重点所以下期我们要详细学习它
- 如何使用 Gherkin 语言去描述 case
- Gherkin 都支持哪些关键字
- 每个关键字的作用
- 等等


