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

2024-03-24 09:20

本文主要是介绍Cucumber 黄瓜测试 BDD 从入门到精通,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 黄瓜测试 BDD 从入门到精通的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841147

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就