大家好!我是虫兵 ~
一个近 10 年经验的测试开发工程师 ~
擅长自动化体系建设与 devops !
要想学习 behave 我们必须要了解他的历史,也就是 behave 是怎么来的呢?那就要从 BDD 开始聊起。什么是 BDD 呢?如下:
BDD - 行为驱动开发是一种敏捷软件开发技术,它鼓励软件项目中的开发人员、QA 和非技术或业务参与者之间的协作。它最初于 2003 年由 Dan North 命名为对测试驱动开发 (TDD) 的回应,包括极限编程中的验收测试或客户测试驱动开发实践。它在过去几年中不断发展。在 2009 年 11 月于伦敦举行的 “敏捷规范、BDD 和测试交换” 中,Dan North 给出了 BDD 的以下定义:BDD 是第二代、由外而内、基于拉动、多利益相关者、多规模、高度自动化、敏捷的方法。它描述了一个与定义明确的输出交互的循环,从而交付了重要的工作、测试软件
BDD 侧重于通过与利益相关者的讨论获得对所需软件行为的清晰理解。它通过用非程序员可以阅读的自然语言编写测试用例来扩展 TDD。行为驱动开发人员使用他们的母语与领域驱动设计的普遍语言相结合来描述他们代码的目的和好处。这允许开发人员专注于为什么要创建代码,而不是技术细节,并最大限度地减少编写代码的技术语言与业务、用户、利益相关者、项目管理等所使用的领域语言之间的翻译.
以上内容来自官网的一些介绍,如果想了解更细大家就直接读官网去学习 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")
Cucumber 上文说了是基于 BDD 理念衍生出来的一个自动化测试框架,(你就可以简单理解为单元测试概念衍生的测试框架 Java 有 Junit,testng ,python 有 pytest 等)Cucumber 流程大概就是读取一些文本编写的规范文件,然后验证这些规范是否符合编写的要求,这些规范编写是由固定编写规则和特殊语法必须按着这种规则语法写,Cucumber 才能识别。举个例子如下:
上文每个场景(Scenario)包含多个步骤列表,这些列表中有一些关键字描述(Given\When\Then),Cucumber 严格执行看每行是否符合描述预期然后会生成一个报告,每个场景(Scenario)通过 ✅ success or ❌ failure 来标识。
那么以上文字描述看起来是不是怪怪的,这种怪怪的描述就叫做 Gherkin.
Gherkin 是由一组纯文本描述的结构为了让 Cucumber 可以读懂的自然语言。这种语法在许多不同国家都有不同的表现形式,所以你的团队可以使用属于你们自己语言的关键词。
Gherkin 语言描述的文档一般都是保存在一个.feature 文件中 (如图),通常这个文件是和你的源代码一块进行版本管理,但是其实作者我来说如果你的项目够大协作人够多,其实我是推荐分开管理,也就是 case 和 框架分离。可以做成平台化管理。
python 在 Cucumber 中的作用其实很好理解了,在实际项目中我们的编程语言众多。迄今为止 Cucumber 对绝大多数编程语言都有对应实现框架的支持(如图),Cucumber 官方推荐选择哪种语言的实现框架和你被测的项目最好保持一致,作者认为有几个原因吧,这要追溯到最初 Cucumber 问世是为了多角色协同,所以是希望 RD 同学也可以参与到自动化建设当中,那么就需要和被测项目保持一致了,如果你的被测项目是 Java 语言开发, 你用 python 搞了一套自动化框架,那么显然对于 RD 来说是有学习成本的是不利于合作的。
这里面:
绿色 是官方托管的,也就是在官方的 Cucumber 工程目录下,由官方实现并维护
蓝色 是半官方,托管在其他地方但是用的是 Cucumber 的组件
黑色 非官方的,托管在其他地方也没有用官方任何组件,说白了,自己实现的这套东西,也能解析 Gerken 描述的 case。
红色 官方实现 但没有维护的就等着你去维护呢
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 都支持哪些关键字
每个关键字的作用
等等
有任何问题可以加作者VX:1010584905, 一起探讨学习!,同时也可以帮有需要朋友,无偿 review 简历,给予面试指导 ~,今年很难,一起学起来吧 !