1. 什么是BDD

Behavior- Driven Development(BDD) 行为驱动开发,是由 Dan North 提出来的,他给出的定义是

BDD 是一个过程,旨在通过改善工程师和业务人员之间的沟通来促进开发项目的交付。BDD 确保所有的开发项目始终关注要交付产品的实际业务需要,即满足用户的所有需求。

cucumber官方文档对BDD的描述可总结为以下几点:

  • Given/When/Then
  • 读起来就像是一份文档
  • 鼓励跨角色协作建立对要解决问题的共识
    • 领域知识不同、语言不通导致沟通障碍

2. 认识Cucumber

Cucumber读取以纯文本形式编写的可执行规范,并验证该软件是否满足那些规范所说的内容

2.1 Gherkin语法

Keywords

  • Feature/功能
  • Scenario/场景
  • Given, When, Then, And, But/假如,当,那么,而且,但是
  • Scenario Outline/场景大纲
  • Examples/例子

a few secondary keywords as well

  • """ (Doc Strings)
  • | (Data Tables)
  • @ (Tags)
  • # (Comments)

可以使用 # language: zh-CN 切换为中文

2.2 Step-definitions 步骤定义

用代码实现Gherkin中定义的步骤的实际操作

  • Gherkin:Given today is sunday

  • step-def:

    Given('today is Sunday', function (){ this.today = 'Sunday';
    });
    
  1. 写feature文件(Scenario、steps)

  2. 定义step-def,让测试失败

  3. 实现step-def,让测试通过

  4. 重构

2.3 示例

代码文件结构

# project structure+ features+ step_definitionsstepdefs.jsis_it_friday_yet.feature

stepdefs.js

const assert = require('assert');
const { Given, When, Then } = require('cucumber');function isItFriday(today) {if (today === "Friday") {return "TGIF";} else {return "Nope";}
}Given('today is {string}', function (givenDay) {this.today = givenDay;
});When('I ask whether it\'s Friday yet', function () {this.actualAnswer = isItFriday(this.today);
});Then('I should be told {string}', function (expectedAnswer) {assert.equal(this.actualAnswer, expectedAnswer);
});

is_it_friday_yet.feature

Feature: Is it Friday yet?Everybody wants to know when it's FridayScenario: Sunday isn't FridayGiven today is SundayWhen I ask whether it's Friday yetThen I should be told "Nope"Scenario: Friday is FridayGiven today is FridayWhen I ask whether it's Friday yetThen I should be told "TGIF"Scenario Outline: Today is or is not FridayGiven today is "<day>"When I ask whether it's Friday yetThen I should be told "<answer>"Examples:| day            | answer || Friday         | TGIF   || Sunday         | Nope   || anything else! | Nope   |

3. 实际上手—with selenium

@TODO 后续补充代码库在这里

  • 主要是在step-definitions实现时,使用selenium

    • example with google search

可以用于UI自动化、API自动化等

4. 问题和思考

  • Cucumber其实不是一个自动化测试工具,而是一个促进团队沟通合作的工具。其实Cucumber只是一个沟通工具,它只是刚巧可以运行测试而已。

  • 如何设计好的测试用例,即如何写出好的Gherkin(@TODO)

    • 需要各角色共同协作,特别是业务人员
    • 关注业务逻辑,不要陷到实现细节里

    例1:

    # For example, for an authentication Scenario, you should write:
    When "Bob" logs in# instead of:Given I visit "/login"When I enter "Bob" in the "user name" fieldAnd I enter "tester" in the "password" fieldAnd I press the "login" buttonThen I should see the "welcome" page
    

    例2: 检查收件箱,可以看出第三个清晰明了且能体现业务价值,比较符合上面的要求。

    # --------------------------------------------------------
    Scenario: Check InboxGiven a user "Tom" with password "123"And a user "Jerry" with password "abc"And an email to "Tom" from "Jerry"When I sign in as "Tom" with password "123"Then I should see one email from "Jerry" in my inbox
    # --------------------------------------------------------
    Scenario: Check InboxGiven a user "Tom"And a user "Jerry"And an email to "Tom" from "Jerry"When I sign in as "Tom"Then I should see one email from "Jerry" in my inbox# --------------------------------------------------------
    Scenario:Check InboxGiven I have received an email from "Jerry"When I sign inThen I should see one email from "Jerry" in my inbox
    
    • 使用数据驱动的方式(Data Tables)
  • 扩展Cucumber生成高质量的文档——可添加每一步的截图(@TODO)

其他支持BDD的工具

  • Gauge
  • python - lettuce
    • 教程https://blog.csdn.net/baidu_36943075/article/details/103851458
      UI自动化Demo https://github.com/fengyibo963/DemoUITestLettuce

BDD之cucumber相关推荐

  1. Cucumber 1 -- 什么是BDD、Cucumber?它们的关系是什么?

    大家好,我是神韵,是一个技术&生活博主.出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己.二是希望我的文章可以帮到大家.欢迎来点赞打卡,你们的行动将是我无限的动力. 本篇主题是: ...

  2. The RSpec Book笔记《一》初步认识TDD,BDD,RSpec,Cucumber

    TDD(Test-Driven Development)测试驱动开发. 在编写代码之前先编写一个测试,这时候测试是失败的,red,因为还没有写对应的实现代码.然后开始编写实现的代码,然后跑刚才写的测试 ...

  3. 高效的敏捷测试第十课 BDD实践和深化

    第24讲:BDD 及其自动化实践 在第 20 讲,我介绍了 TDD.UTDD 和 ATDD,主要讨论了需求的可测试性,通过测试先行的敏捷开发理念,比如先建立用户故事的验收标准,来提升需求的质量.今天在 ...

  4. Cucumber之一Cucumber概述——学习新篇章

    Cucumber(黄瓜)是什么? 你也可以通过这篇博文了解个大概(点击查看) . 免费英语视频教程可见微信公众号:[软测小生]里面,请关注公号更新相关文章和视频资源. 开始使用Cucumber BDD ...

  5. 有赞分层自动化测试实践

    本文首发于 TesterHome, https://testerhome.com/articles/19109 一.背景 先理一下自动化测试的概念,从广义上来说,一切通过工具(程序)的方式来代替或者辅 ...

  6. 飞书上点链接怎么指定跳转浏览器_链接示例表功能还可以这样用??

    在 CukeTest 最新版 1.6.0 中更新了一个新功能--链接示例表,能够将外部维护的测试用例数据文件直接链接到示例表中使用. 了解行为驱动(BDD)或Cucumber的同学都知道,长久以来,C ...

  7. 面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)...

    操作系统 解释堆和栈的区别. 分配在堆的内存与分配在堆栈的内存有什么不同 分配在堆的内存要手动去释放 线程与进程的区别 多线程中栈与堆是公有的还是私有的 在多线程环境下,每个线程拥有一个栈和一个程序计 ...

  8. 自动化测试框架cucumber_自动化测试框架cucumber-java操作手册_从配置到生成测报...

    一.cucumber简介 cucumber是BDD(Behavior-driven development,行为驱动开发)的一个自动化测试框架产品.cucumber使用自然语言来描述测试,通过设置中文 ...

  9. neo4j browser执行脚本后不提示用时_还不懂什么是分层自动化测试的,有赞的实践经历告诉你...

    来源:https://testerhome.com/articles/19109 #  背景 先理一下自动化测试的概念,从广义上来说,一切通过工具(程序)的方式来代替或者辅助手工测试的行为都可以成为自 ...

最新文章

  1. 调研 | 大数据师资培训,你想学哪门课、有哪些意见?
  2. ###修改图片为圆形
  3. Q+会带来什么样的互联网时代?
  4. 优化程序性能的策略汇总
  5. Dell R740服务器添加GPU卡
  6. 安装php-redis遇到Error: Package: php-pecl-igbinary-1.2.1-1.el7.x86_64 (epel)
  7. IOS简单的登陆界面
  8. spring 多数据源- 原理
  9. python达内教程_达内教你如何零基础入门python编程
  10. HTML学习笔记:让div在屏幕居中,图片在div里居中
  11. 【干货】Python玩转各种多媒体,视频、音频到图片
  12. 微软MDT 安装与配置(一)
  13. 一款简单好用的动画/游戏制作软件|源码编辑器|编程猫南宁体验中心
  14. 风玫瑰图的绘制,基于气象A文件(windrose)
  15. html5银行理财项目实践作业,金融理财产品实践报告.doc
  16. php 识别二维码内容
  17. 多源复制中单个channal复制异常处理
  18. 抖音小程序创建广告位
  19. java中floa后面有L吗_关于java的nextFloat()后面跟一个nextLine()
  20. iconfont字体图标下载

热门文章

  1. 这样学Shader可以少走几年弯路,看完我信了……
  2. 初学者用Eclipse和IDEA哪个好用一点?
  3. 国内首本数据竞赛图书《阿里云天池大赛赛题解析——机器学习篇》今日开启预售!
  4. Git stash 的用法,将暂存区的内容缓存并移除,解决切换分支前的内容缓存问题
  5. ACM程序设计书中题目--J(大写字母的更替)
  6. 关于 618的前世今生,我帮东哥告诉你
  7. 各国商圈json数据及mysql文件
  8. 九龙证券|次新股叠加智慧交通+信创+数字经济概念,开盘冲涨停!
  9. 2018年总结和职场规划
  10. 通知:台湾虾皮跨境物流成本(藏价)调整