【测试】——Cucumber入门

📖 前言:Cucumber框架是行为驱动(BDD)框架的一种,通过自然语言站在功能使用者视角,描述编写测试用例。简单来说就是通过feature文件编写脚本,脚本对应java写的方法,会有一个启动器配置对应的规则,按照指定规则执行对应的脚本。

在这里插入图片描述


目录

  • 🕒 1. 行为驱动(BDD)
    • 🕘 1.1 什么是BDD
    • 🕘 1.2 BDD与TDD
    • 🕘 1.3 BDD与敏捷
  • 🕒 2. Cucumber
    • 🕘 2.1 Gherkin
    • 🕘 2.2 步骤定义(step definitions)
    • 🕘 2.3 场景示例
  • 🕒 3. 项目实战

🕒 1. 行为驱动(BDD)

🕘 1.1 什么是BDD

BDD(Behaviour-Driven Development)是一种软件团队工作的方式,通过以下方式缩小业务人员和技术人员之间的差距:

  • 鼓励跨角色协作,以建立对要解决问题的共同理解
  • 通过快速、小规模的迭代来增加反馈和价值流动
  • 生成自动检查系统行为的系统文档

我们通过围绕具体的、现实世界的示例进行协作工作来实现这一点,这些示例说明了我们希望系统如何表现。我们使用这些示例从概念到实现进行指导,在持续协作的过程中进行。

🕘 1.2 BDD与TDD

测试驱动开发(TDD, Test-Driven Development)是一种软件开发方法,开发人员在编写实际代码之前先编写测试,通过不断的测试和重构来确保代码的正确性。行为驱动开发(BDD)则扩展了TDD,强调通过自然语言编写的场景来描述和验证系统的行为,使其对所有利益相关者都可理解。BDD不仅关注代码的正确性,还关注系统是否符合用户需求。

特点BDD(行为驱动开发)TDD(测试驱动开发)
目标确保系统行为符合用户需求确保代码在细粒度级别上的正确性
方法使用自然语言编写场景,描述和验证系统行为在编写实际代码之前先编写测试,遵循“红-绿-重构”循环
参与者开发人员、QA工程师、测试人员和非技术利益相关者开发人员和QA工程师
语言自然语言(如Gherkin)编程语言

🕘 1.3 BDD与敏捷

BDD是一种敏捷软件开发的实践,它鼓励软件项目中的所有利益相关者——包括开发人员、测试人员和业务人员——一起参与到软件的行为的定义和验证中来。BDD强调通过使用一种称为“用户故事”的技术来理解软件的行为,用户故事描述了软件的某个功能对用户的价值。

BDD是一种敏捷软件开发实践,旨在鼓励开发人员、测试人员和业务人员等所有利益相关者共同参与定义和验证软件行为。BDD通过“用户故事”来理解和描述软件的行为,确保每个功能都能为用户带来实际价值。

🕒 2. Cucumber

🔎 Cucumber官网文档

🕘 2.1 Gherkin

Gherkin是一组语法规则,使纯文本结构化,以便Cucumber理解。Gherkin有多个用途:

  • 明确的可执行规范
  • 使用Cucumber进行自动化测试
  • 记录系统的实际行为

在这里插入图片描述

Cucumber语法在许多语言中有本地化处理,这里就使用英语即可。Gherkin文档存储在.feature文本文件中,通常与软件一起在源代码管理中进行版本控制。

关键字描述
Feature描述功能的名称和简要说明
Scenario描述具体的测试场景
Given描述场景的初始上下文或前提条件
When描述触发的动作或事件
Then描述预期的结果或输出
And用于连接多个Given、When或Then步骤
But用于连接多个Given、When或Then步骤,表示例外情况
Background在每个场景之前运行的步骤,用于设置通用的前提条件
Scenario Outline描述具有多个示例的场景模板
Examples为Scenario Outline提供具体的示例数据

🕘 2.2 步骤定义(step definitions)

步骤定义将Gherkin步骤连接到编程代码。步骤定义执行步骤应执行的操作。因此,步骤定义将规范硬连接到实现。

🕘 2.3 场景示例

Feature: Is it Friday yet?Everybody wants to know when it's FridayScenario: Today is FridayGiven today is FridayWhen I ask whether it's Friday yetThen I should be told "Yes"Scenario: Today is not FridayGiven today is MondayWhen I ask whether it's Friday yetThen I should be told "No"
package hellocucumber;import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import static org.junit.jupiter.api.Assertions.*;class IsItFriday {static String isItFriday(String today) {return "Friday".equals(today) ? "Yes" : "No";}
}public class StepDefinitions {private String today;private String actualAnswer;@Given("today is {string}")public void today_is(String today) {this.today = today;}@When("I ask whether it's Friday yet")public void i_ask_whether_it_s_Friday_yet() {actualAnswer = IsItFriday.isItFriday(today);}@Then("I should be told {string}")public void i_should_be_told(String expectedAnswer) {assertEquals(expectedAnswer, actualAnswer);}
}

Gherkin文件:描述了两个场景:

  1. 今天是星期五:当今天是星期五时,询问是否是星期五,预期回答是“是”。
  2. 今天不是星期五:当今天是星期一时,询问是否是星期五,预期回答是“否”。

步骤定义:文件包含了实现这些场景的Java代码:

  • @Given:设置今天的日期。
  • @When:询问是否是星期五。
  • @Then:验证回答是否符合预期。

项目结构如下:

src
└── test├── java│   └── hellocucumber│       └── StepDefinitions.java└── resources└── hellocucumber└── is_it_friday_yet.feature

通过运行Cucumber测试,可以验证代码是否正确实现了预期的行为。

🕒 3. 项目实战

🔎 Cucumber项目实战


OK,以上就是本期知识点“Cucumber入门”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/504359.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无网络时自动切换备用网络环境

目录 背景目标为什么需要做自动网络切换网络切换手段 网络环境实现思路和代码部署脚本开机自动执行附录连接两个网络时的路由问题 背景 目标 学校实验室有两个网络环境,我电脑使用网线连接稳定但低速的网络A,使用WiFi连接高速但不稳定的网络B。因此&am…

【微服务】1、引入;注册中心;OpenFeign

微服务技术学习引入 - 微服务自2016年起搜索指数持续增长,已成为企业开发大型项目的必备技术,中高级java工程师招聘多要求熟悉微服务相关技术。微服务架构介绍 概念:微服务是一种软件架构风格,以专注于单一职责的多个响应项目为基…

OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性

本文作者: 容器服务团队:刘佳旭、冯诗淳 可观测团队:竺夏栋、麻嘉豪、隋吉智 一、前言 Kubernetes(K8s)架构已经是当今 IT 架构的主流与事实标准(CNCF Survey[1])。随着承接的业务规模越来越大,用户也在使…

docker+ffmpeg+nginx+rtmp 拉取摄像机视频

1、构造程序容器镜像 app.py import subprocess import json import time import multiprocessing import socketdef check_rtmp_server(host, port, timeout5):try:with socket.create_connection((host, port), timeout):print(f"RTMP server at {host}:{port} is avai…

网络安全-web渗透环境搭建-BWAPP(基础篇)

01--所需系统环境: 虚拟主机系统部署(vmware,虚拟主机创建、虚拟主机网络配置(桥接,便于网络中多个主机都能访问虚拟主机)、虚拟软件功能,快照、克隆、镜像文件加载,ova文件制作&am…

SQL Server中可以通过扩展事件来自动抓取阻塞

在SQL Server中可以通过扩展事件来自动抓取阻塞,以下是详细流程: 开启阻塞跟踪配置: • 执行以下SQL语句来启用相关配置: EXEC sp_configureshow advanced options, 1; RECONFIGURE; EXEC sp_configure blocked process thresh…

SpringBoot环境和Maven配置

SpringBoot环境和Maven配置 1. 环境准备2. Maven2.1 什么是Maven2.2 为什么要学 Maven2.3 创建一个 Maven项目2.4 Maven核心功能2.4.1 项目构建2.4.2 依赖管理2.4.3 Maven Help插件 2.5 Maven 仓库2.5.1本地仓库2.5.2 中央仓库2.5.3 私有服务器, 也称为私服 2.6 Maven设置国内源…

C语言初阶习题【25】strcpy的模拟实现

1. 首先先调用下库函数,看它实现了什么 2. 我们自己实现一个strcpy函数 3. 改进1 把*destnation和source 写上去,使用后置 4. 改进2 这里直接把赋值操作放到了while的判断条件里面,然后while循环语句什么都不做,放了一个空语句…

网络基础1 http1.0 1.1 http/2的演进史

http1.0 1.1 http/2的演进史😎 (连接复用 队头阻塞 服务器推送 2进制分帧) 概述 我们主要关注的是应用层 传输层 http协议发展历史 http的报文结构:起始行 Header Body http的典型特征 http存在的典型问题 Keep Alive机制 chun…

C# XPTable 带图片的增删改查(XPTable控件使用说明十三)

今天完成了一个DEMO, XPtable直接增删改查,带富文本图片,这就是XPtable的优势。需要提示的是关于图片编辑后的保存:使用焦点,过滤掉逐条选择显示图片变化冗余保存数据库。 全部代码: using System.Security.Policy; u…

在 Vue 3 集成 e签宝电子合同签署功能

实现 Vue 3 e签宝电子合同签署功能,需要使用 e签宝提供的实际 SDK 或 API。 e签宝通常提供针对不同平台(如 Web、Android、iOS)的 SDK,而 Web 端一般通过 WebView 或直接使用嵌入式 iframe 来加载合同签署页面。 下面举个 &…

Perturbed-Attention Guidance(PAG) 笔记

Self-Rectifying Diffusion Sampling with Perturbed-Attention Guidance Github 摘要 近期研究表明,扩散模型能够生成高质量样本,但其质量在很大程度上依赖于采样引导技术,如分类器引导(CG)和无分类器引导&#xff…

(概率论)无偏估计

参考文章:(15 封私信 / 51 条消息) 什么是无偏估计? - 知乎 (zhihu.com) 首先,第一个回答中,马同学图解数学讲解得很形象, 我的概括是:“注意,有一个总体的均值u。然后,如果抽样n个&…

USB 驱动开发 --- Gadget 设备连接 Windows 免驱

环境信息 测试使用 DuoS(Arm CA53, Linux 5.10) 搭建方案验证环境,使用 USB sniff Wirekshark 抓包分析,合照如下: 注:左侧图中设备:1. 蓝色,USB sniff 非侵入工 USB 抓包工具;2. …

OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)

前篇博客有对常用LSA的总结 2类LSA(Network-LSA) DR产生泛洪范围为本区域 作用:  描述MA网络拓扑信息和网络信息,拓扑信息主要描述当前MA网络中伪节点连接着哪几台路由。网络信息描述当前网络的 掩码和DR接口IP地址。 影响邻居建立中说到…

开放词汇检测新晋SOTA:地瓜机器人开源DOSOD实时检测算法

在计算机视觉领域,目标检测是一项关键技术,旨在识别图像或视频中感兴趣物体的位置与类别。传统的闭集检测长期占据主导地位,但近年来,开放词汇检测(Open-Vocabulary Object Detection-OVOD 或者 Open-Set Object Detec…

【Ubuntu】 Ubuntu22.04搭建NFS服务

安装NFS服务端 sudo apt install nfs-kernel-server 安装NFS客户端 sudo apt install nfs-common 配置/etc/exports sudo vim /etc/exports 第一个字段:/home/lm/code/nfswork共享的目录 第二个字段:指定哪些用户可以访问 ​ * 表示所有用户都可以访…

第四、五章补充:线代本质合集(B站:小崔说数)

视频1:线性空间 原视频:【线性代数的本质】向量空间、基向量的几何解释_哔哩哔哩_bilibili 很多同学在学习线性代数的时候,会遇到一个困扰,就是不知道什么是线性空间。因为中文的教材往往对线性空间的定义是非常偏数学的&#x…

JS进阶--JS听到了不灭的回响

作用域 作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问 作用域分为局部和全局 局部作用域 局部作用域分为函数和块 那 什么是块作用域呢? 在 JavaScript 中使用 { } 包裹的代码称为代码块…

MFC读写文件实例

程序功能:点击写入文件按钮将输入编辑框中内容写入以系统时间命名的文件中,点击读取文件按钮将选中的文件内容显示到静态文本控件中。 相关代码如下: void CWR_FILEDlg::OnButton1() {CString str;GetDlgItem(IDC_EDIT1)->GetWindowText…