Cucumber 黄瓜测试 BDD 从入门到精通

以Cucumber为例的BDD模式自动化测试初体验 大家好,最近在工作中使用到了cucumber这个工具,并且第一次知道自动化测试还能用BDD(Behavior Driven Development)的形式来写,感觉很有意思同时也体会到了不少好处,所以想和大家分享一些学习过程和心得。 阅读详情

1. Cucumber

Cucumber 是 BDD(Behavior-Driven Development,行为驱动开发)的一个自动化测试工具,使用自然语言来描述测试用例,使得 非研发(QA、PM)也可以理解甚至编写 测试用例。

官方表示:应该将 Cucumber 视为一个【文档编写工具】,而非一个单纯的自动化测试工具

  • 撰写时,应该要以 PM 也能理解 测试用例 为目标去编写 Cucumber

2. Gherkin

Gherkin 是 Cucumber 用来描述 测试用例 的语言,以下为关键字的用意与关联关系。

以 分享概览 为例

  • Given:新增 帐号abc@qq.com 、新增 概览1
  • When:将 概览1 分享给 帐号abc@qq.com
  • Then:校验 帐号abc@qq.com 是否能查看到 概览1

2.1 Scenario 范例

Feature: 授权功能  
  
  Scenario: 帐号 通过绑定 角色 进行授权  
  
    Given 新增角色 '分析师',拥有权限 '1001, 1002, 1003'  
    And 新增帐号 'abc@qq.com'  
  
    When 帐号 'abc@qq.com' 绑定角色 '分析师'  
  
    Then 鉴权 帐号 'abc@qq.com',有权限 '1001'  
    And  鉴权 帐号 'abc@qq.com',有权限 '1002'  
    But  鉴权 帐号 'abc@qq.com',没有权限 '1005'

复制代码

2.2 Background 范例

Feature: 授权功能  

  Background:   
    Given 新增帐号 'abc@qq.com'  


  Scenario: 帐号 通过绑定 角色 进行授权  
  
    Given 新增角色 '分析师',拥有权限 '1001, 1002, 1003'  
  
    When 帐号 'abc@qq.com' 绑定角色 '分析师'  
  
    Then 鉴权 帐号 'abc@qq.com',有权限 '1001'  
    And  鉴权 帐号 'abc@qq.com',有权限 '1002'  
    But  鉴权 帐号 'abc@qq.com',没有权限 '1005'  
  
  
  Scenario: 帐号 通过绑定 机构 进行授权  
  
    Given 新增机构 '北京部门',拥有权限 '2001, 2002, 2003'  
  
    When 帐号 'abc@qq.com' 绑定机构 '北京部门'  
  
    Then 鉴权 帐号 'abc@qq.com',有权限 '2001'  
    And  鉴权 帐号 'abc@qq.com',有权限 '2002'  
    But  鉴权 帐号 'abc@qq.com',没有权限 '2005'

复制代码

2.3 Scenario Outline 范例

可以在多个 Step 上共用同一个 "简单" 参数,且每一个 Example 都视为一个 Scenario

Feature: 授权功能  
  
  Scenario Outline: 帐号 通过绑定 角色 进行授权  
  
    Given 新增角色 <role>,拥有权限 <permissions>  
    
    When 新增帐号 <account>  
    
    Then 帐号 <account> 绑定角色 <role>  
    And  鉴权 帐号 <account>,有权限 <has_permission>  
  
    Examples:  
	    | role   | permissions      | account    | has_permission |  
	    | 分析师  | 1001, 1002, 1003 | abc@qq.com | 1001           |  
	    | 开发者  | 2001, 2002, 2003 | cde@qq.com | 2001           |  
	    | 管理员  | 3001, 3002, 3003 | fgh@qq.com | 3001           |
复制代码

3. 基本概念

3.1 文件结构

  • Gherkin 写在 .feature 文件中
  • Step 对应的逻辑 写在 .java 文件中

3.2 Step 映射

通过 Gherkin 语法上的描述,找到与 注解 value 值匹配的 Java 方法,将 Gherkin 与 Java 代码关联起来。

3.3 Scenario 独立

  • 当同时执行多个 Scenario 时,执行每个 Scenario 对应的 Java 文件都会被重新创建。
  • 不同的 Scenario 之间,不应该存在数据依赖(MySQL),如果存在依赖,将会使 Scenario 变得脆弱
    • 可以在 Backgroud,进行数据清理,来保证测试结果的正确性

二、最佳实践

1. 撰写 Scenairo 原则 - BRIEF

school.cucumber.io/courses/tak…

B:Business Language。

  • Scenairo 中使用的词语应该使用【业务团队成员】能够理解的词语,否则将无法与业务团队成员互动。

R:Real Data。

  • Scenairo 中应该使用 具体、真实 的数据(不要用 1、2、3、A、B、C),有助于让场景变得生动,并及早揭示边界条件与基本假设。

I:Intention Revealing。

  • Scenairo 应该描述试图实现的意图,而不是描述程式将如何实现它的机制。
  • 确保每一行 Step 描述的是 意图 而非 机制。 (比如:创建帐号,就不要写成 "将帐号数据写入 user 表,并在 account_project 表绑定帐号与项目的关联")

E:Essential。

  • Scenairo 应该只保留必要的 Step,不直接促成结果的场景都应该被删除。
  • 任何不能增加读者对预期行为理解的场景,都不應該出现在文档中。

F:Focus。

  • 多数的 Scenairo 应该只专注于单一职责。

BRIEF

  • 建议将大多数的 Scenairo 限制在五行或更少,这将使它们更易于阅读与推理,并有助于避免 同时测试多个规则 或 增加额外细节。

2. 保证 Scenairo 可读性好处

school.cucumber.io/courses/tak…

  • 随时获得 你做的事情是否正确 的反馈
  • 你的 Feature 可以变成描述你 系统功能 的 线上文档
  • Scenairo 将会引导你的技术设计

3. 开发流程推荐

school.cucumber.io/courses/tak…

  1. 在 Cucumber 中描述你想要实现的 Scenairo,把所有的 Step 串连起来,并运行 Cucumber 使其出现 失败 结果
  2. 持续实现 Step 与 API 的具体逻辑,并观察 API 是如何 失败
BDD之cucumber 1. 什么是BDD Behavior- Driven Development(BDD) 行为驱动开发,是由 Dan North 提出来的,他给出的定义是 BDD 是一个过程,旨在通过改善工程师和业务人员之间的沟通来促进开发项目的交付。BDD 确保所有的开发项目始终关注要交付产品的实际业务需要,即满足用户的所有需求。 cucumber官方文档对BDD的描述可总结为以下几点: Given/When/Then 读起来就像是一份文档 鼓励跨角色协作建立对要解决问题的共识 领域知识不同、语言不通导致沟通障碍 阅读详情

相关推荐

【保姆级】SpringBoot整合Cucumber(BDD) >>> part3

这篇文章是对前面part1、part2相关常见报错及其解决方法 1. 关于CucumberException之@Autowired未生效的问题 报错详情 ​如果你报了如上图的异常,不要着急去百度,我们往下看,找到下面的Caused by... 此时你会发现,报错的真实原因其实是NoSuchBeanDefinitionException即我们代码中的@Autowired未生效 解决方法 在测试启动类上添加@SpringBootTest注解 package com.aqin;

aqin1012的博客 1163

Selenium WebDriver自动化测试(框架篇):BDD之Cucumber框架

什么是Cucumber Cucumber 是一个能够理解用普通语言 描述的测试用例的支持行为驱动开发(BDD)的自动化测试工具,用Ruby编写,支持Java和.Net等多种开发语言。 Cucumber术语 Feature story scenario Given <条件> When <事件> Then <结果> 搭建Cucumber环境 1、eclipse工具 集成cucumber框架,访问官网了解更多功能; 2、pom配置cucumber依..

我先测了 1654

Cucumber实践项目:掌握行为驱动开发(BDD)与Java结合

本文还有配套的精品资源,点击获取 简介:Cucumber实践项目强调了Cucumber作为软件测试工具的重要作用,它支持使用自然语言(Gherkin语句)编写测试用例,便于非技术人员参与。基于行为驱动开发(BDD)的理念,Cucumber帮助团队更清晰地理解软件功能需求,并确保产品符合预期。本项目详细介绍了在Java环境中与JUnit结合使用Cucumber的流程,包括安装...

weixin_36444661的博客 1683

麒麟V10 ARM环境离线部署MySQL:从依赖缺失到服务自启的完整避坑指南

本文详细介绍了在麒麟V10 ARM环境下离线部署MySQL的完整流程,包括依赖缺失解决方案、目录配置、服务自启设置及性能调优。特别针对国产操作系统和ARM架构的兼容性问题,提供了实用的避坑指南和优化建议,帮助用户高效完成MySQL部署与维护。

weixin_28741413的博客 409

动态规划法:n*m方格前进问题

在一个n*m的方格中,m为奇数,放置有n*m个数,方格中间的下方有一人,此人可按照正前方相临的五个方向(方格)前进但不能越出方格。人每走过一个方格必须取此方格中的数。要求找到一条从底到顶的路径,使其数相加之和为最大。输出和的最大值。 算法设计: 可以使用动态规划方法,从顶部开始,将第二排的每个数加上顶部第一排的最优解,将6排的问题缩小为5排的问题,然后重复该操作,直到底部最后一排,此时

Winifred_1997的博客 4675

无人机巡检提速3倍!YOLOv8n+OpenVINO让Jetson Nano跑25FPS,还能多飞25分钟

摘要(149字): 针对无人机巡检中Jetson Nano算力不足导致的帧率低、首次推理延迟高、续航短等问题,提出YOLOv8n+OpenVINO联合优化方案: 模型轻量化:YOLOv8n参数量仅3.2M(较v8s减少71%),Jetson Nano帧率从8FPS提升至15FPS(原生),绝缘子裂纹召回率仅降3%; OpenVINO加速:AUTO模式动态分配CPU/GPU算力,首次推理延迟从500ms降至200ms,帧率再优化至25FPS; 能效提升:功耗降低40%,单次续航延长25分钟。方案已落地电力/林

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1242

RK3568/RK3588之修改8250驱动实现RS485收发的自动切换

在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。

哒宰的博客 3116

瑞数6.5逆向实战:手把手教你用RPC搞定cookie sign加密(附环境补全技巧)

本文深入解析瑞数6.5逆向实战,重点探讨如何结合环境补全与RPC调用技术来应对其动态加密机制。文章详细介绍了环境指纹采集、双重验证等核心防护原理,并提供了基于Puppeteer的RPC实现方案,手把手教你搞定cookie sign加密,附有实用的环境补全技巧与完整代码示例。

weixin_29315091的博客 1273

Autosar代码包初识 2 - 如何编译Vector包内Demo工程

Vetcor autosar代码包Demo工程编译,GreenHills,RH850,Autosar,Davinci COnfigurator

weixin_42412049的博客 5184

【国密】基于SM2的协同签名与协同解密方案

两方协同签名指客户端与服务端协同完成签名、验签操作,具体实现方案参考了信工所专利[3]。在业务应用中,两方或多方的协同签名一般采用门限签名方案可以用来构造。门限密码算法在多方协作的相关场景中应用十分广泛,可以实现数据联合授权、认证、密钥安全恢复、密钥安全交换等需求,在诸多分布式多方计算协议中均可见其身影。在上述两方协同签名方案中,最巧妙的地方在于签名值s分量的构造,通过一些列数学变换,得以恢复。以下从两方协同签名方案介绍入手,介绍门限密码在协同签名中的应用。解决上述问题的关键在于门限密码算法的巧妙构造。

听雨草堂 8390

系统架构设计师重难点知识脑图

大家都知道现在的软考自从变成机考后,越来越难了,教程上的内容不仅全还细,几乎任何内容都有可能考,出题老师主打一个出其不意,比如2024年5月考试,连UML时序图的片段都考,这。软件工程、系统架构基础知识、系统质量属性与架构评估、软件架构的演化和维护、信息系统架构设计、层次式架构设计、云原生架构设计、面向服务架构设计、安全架构设计、大数据架构设计等。所以对于教程上的任何知识点,都需要去记忆。因此我在这里制作了一个脑图,将所有知识点集中在一个脑图中,通过首词组句法,记忆背诵,通过一个个的展开节点,加强记忆。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 1104

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: Clojure vs Java:少数据结构、多函数胜过多个单独类的优点
下一篇: Java并发编程 | 局部变量为什么是线程安全的
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值