Cucumber基本介绍

Cucumber 是什么?

Cucumber是一种支持行为驱动开发(BDD)的工具

Cucumber读取以纯文本编写的可执行规范,并验证软件是否按照这些规范所说的执行。规范由多个示例或场景组成。例如:

Feature: 用户登录功能  
  作为用户,我希望能够登录到系统中  
  
  Scenario: 成功登录  
    Given 用户已打开登录页面  
    When 用户输入正确的用户名和密码  
    Then 用户应成功登录到系统,并看到欢迎信息  

每个场景都是Cucumber要完成的步骤列表。Cucumber验证软件是否符合规范,并生成一个报告,指示:

  • ✅ 成功
  • ❌ 每个场景的失败。

为了让Cucumber理解场景,它们必须遵循一些基本的语法规则,也就是Gherkin。

Gherkin 是什么

Gherkin 是一套语法规则,它使普通文本具有足够的结构,让Cucumber能够理解。

Gherkin 的作用:

  • 明确的可执行规范
  • 使用Cucumber进行自动化测试
  • 记录系统的实际行为
    在这里插入图片描述

Gherkin 文档存储在.feature文本文件中,通常与软件一起在源代码管理中进行版本控制。

什么是步骤定义(步骤函数)

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

在BDD(行为驱动开发)中,Step Definitions扮演着关键的角色。它们是将用自然语言编写的Gherkin格式的测试场景(如Feature、Scenario等)与实际的测试代码连接起来的桥梁。具体来说,Step Definitions的作用体现在以下几个方面:

  1. 翻译自然语言为代码:Step Definitions将Gherkin语言中描述的用户故事或场景步骤转换为可执行的测试代码。这样,BDD工具(如Cucumber)就能理解并执行测试场景中的每一个步骤。

  2. 提供测试逻辑:Step Definitions不仅翻译步骤,还包含了执行这些步骤所需的测试逻辑。这意味着它们包含了验证系统行为是否符合预期的实际代码。

  3. 增强可读性和可维护性:通过将测试逻辑封装在Step Definitions中,测试场景可以保持简洁和易于理解。这有助于提高测试代码的可读性,同时也使得维护变得更加容易。

  4. 促进跨团队协作:BDD鼓励跨团队协作,包括开发人员、测试人员、产品经理和业务分析师等。Step Definitions使得非技术人员(如产品经理或业务分析师)能够理解和参与测试过程,因为他们可以通过Gherkin语言描述测试场景,而不需要编写实际的测试代码。

  5. 提高代码复用性:在编写Step Definitions时,可以定义通用的步骤方法,这些方法可以在多个测试场景之间共享和复用。这有助于减少重复代码,提高测试代码的效率。

以Java语言对上面的登录的规格编写步骤函数,示例代码如下:

import io.cucumber.java.en.Given;  
import io.cucumber.java.en.When;  
import io.cucumber.java.en.Then;  
import static org.junit.Assert.assertTrue;  
import static org.mockito.Mockito.*;  
  
public class UserLoginStepDefinitions {  
  
    private LoginPage loginPage;  
    private User user;  
    private SystemSystem system;  
  
    // 假设你有LoginPage和SystemSystem这样的类来模拟登录页面和系统行为  
    public UserLoginStepDefinitions(LoginPage loginPage, SystemSystem system) {  
        this.loginPage = loginPage;  
        this.system = system;  
    }  
  
    @Given("^用户已打开登录页面$")  
    public void 用户已打开登录页面() {  
        // 这里可以初始化登录页面,或者模拟用户打开登录页面的行为  
        // 例如,你可以创建一个登录页面的实例或者调用一个模拟方法  
    }  
  
    @When("^用户输入正确的用户名和密码$")  
    public void 用户输入正确的用户名和密码() {  
        // 这里应该包含用户输入用户名和密码的逻辑  
        // 假设user对象包含了正确的用户名和密码  
        user = new User("correctUsername", "correctPassword");  
        loginPage.login(user);  
    }  
  
    @Then("^用户应成功登录到系统,并看到欢迎信息$")  
    public void 用户应成功登录到系统并看到欢迎信息() {  
        // 这里验证用户是否成功登录,并看到欢迎信息  
        // 你可能需要调用system的某个方法来检查登录状态,或者验证登录页面的状态  
        assertTrue(system.isUserLoggedIn(user));  
        // 假设登录成功后,登录页面会显示欢迎信息  
        assertTrue(loginPage.containsWelcomeMessage());  
    }  
}

术语

  • Cucumber ,黄瓜,BDD测试的工具, 不同的语言对应不同的库。
  • Gherkin 小黄瓜,小黄瓜语法


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(1)——场景故事介绍

生成NPC为交互应用程序创建逼真的人类行为模拟。在这项工作中,我们通过将二十五个NPC放置在一个沙盒环境中(类似于The Sims,模拟人生),展示了生成NPC的能力。用户可以观察和干预NPC的日常计划、分享新闻、建立关系以及…

随机过程-题目

1.平稳随机过程的统计特姓不随时间的推移而不同,其一维分布与时间无关,二维分布只与时间间隔有关。 2.一个均值为0、方差为的窄带平稳高斯过程,其同相分量和正交分量是平稳高斯过程,均值为0,方差为。 3.均值为0的平稳…

Python 数据结构和算法实用指南(四)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 第十二章:字符串算法和技术 根据所解决的问题,有许多流行的字符串处理算法。然而,最重要、最流行和最有…

深度学习--CNN卷积神经网络(附图)

框架 让我们先看一下CNN的框架 卷积层中后是ReLu激活函数 ,然后是深化池,之后是全连接,最后进行Softmax进行归一化。 所以,我们先逐一了解一下它们各个部分 全连接层 全连接层也称感知机,BP神经网络 全连接层&…

《 我的 CSDN 时光,一周年里程碑》# 胡杨三千年 # 致敬奔腾不息的你 # 胡杨不死, 砥砺不绝

LiuJinTao : 2024年4月21日 一定要披荆斩棘,保持学习的态度和能力!加油 LiuJinTao 2025年4月21日 文章目录 《 我的 CSDN 时光,一周年里程碑》机缘收获日常成就憧憬保持热爱,奔赴山海跨越山海,终见曙光致 …

使用Python爬取易车网汽车信息(含x-sign参数逆向分析)

文章目录 1. 写在前面2. 接口分析3. 断点分析3. 算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致…

.NET 邮件发送 SMTP邮件发送

SMTP(Simple Mail Transfer Protocol)是用于电子邮件传输的规则集,可以从邮件客户端向接收电子邮件服务器发送、中继或转发邮件。发件人可使用SMTP 服务器来执行发送电子邮件的过程。SMTP服务器则是按照这些规则中转电子邮件的服务器。 IMAP…

Linux应用开发(8):Linux进程间通信(IPC):管道

Linux应用开发(7):Linux进程间通信(IPC):POSIX消息队列https://blog.csdn.net/tecsai/article/details/137879465 1. 简述 我们在前面已经介绍了进程间通信(IPC)常用的“消息队列”…

C语言 逻辑运算符

本文 我们来说 逻辑运算符 有时做出决策需要测试多个条件,C语言提供了用于将简单条件组合成复杂条件的逻辑运算符。 逻辑运算符 如下图 用逻辑运算符连接操作数组成的表达式称为逻辑表达式。 逻辑运算的结果只有0和1 逻辑运算的对象可以是任意数值型,但…

C# 自动填充文字内容到指定图片

目录 需求 开发运行环境 方法设计 实现代码 AddText方法 图片转Base64 调用示例 小结 需求 在我们的一些发布系统项目应用中,会经常发布一些链接图标,该图标基本上以模板背景为主,并填充项目文字内容。解决方式一般会让美工进行制作…

SL7220线性降压恒流3.6A 外围只需两个电阻 耐压40V汽车大灯IC

概述: SL7220 是一款双路线性降压LED恒流驱动器,外围只需两个电阻,输出电流10MA-3600MA。 SL7220 内置过热保护功能,内置输入过压保护功能。 SL7220 静态电流典型值为120uA。 特点 ●输入电压范围:2.5V-40V ●电…

Rokid AR Lite空间计算套装发布,中国空间计算踏上差异化领先之路

动动手指、动动眼睛就可以“操控一切”,这种颇具科幻感、未来感的交互方式,令许多人感叹“未来已来”。而这令人震撼的变革背后,正是空间计算技术的迅猛崛起与广泛应用,使得这种曾经只存在于想象中的交互方式,如今正逐…

超分中使用的损失函数和经典文章

损失函数 https://towardsdatascience.com/super-resolution-a-basic-study-e01af1449e13 在GAN出现之前,使用的更多是MSE,PSNR,SSIM来衡量图像相似度,同时也使用他们作为损失函数。 MSE 表面上MSE直接决定了PSNR,MSE&#xff…

html接入高德地图

1.申请key key申请地址&#xff1a;https://console.amap.com/dev/key/app 官方文档 https://lbs.amap.com/api/javascript-api-v2/summary 2.html接入示例 需要将YOUR_KEY替换成自己的key <!doctype html> <html> <head><meta charset"utf-…

2024年上海中考数学模拟题和答案,由过去十年真题随机组卷

还有不到两个月就是上海中考了&#xff0c;为了帮助孩子们更好地准备&#xff0c;好真题网把整理了过去十年的中考数学题真题&#xff0c;做成了在线试卷&#xff0c;便于孩子便捷地反复练习。吃透真题及其背后的知识点&#xff0c;是备考各种考试最科学、高效的方法&#xff0…

端午新疆自驾游招募

欢迎关注「苏南下」 在这里分享我的旅行和影像创作心得 端午节快到了&#xff0c;我计划带队开启【新疆喀什】旅拍摄影小团。让我这个新疆人带你去新疆赏美景、拍美片和吃美食。 出行时间是6.6-6.11日&#xff0c;为期6天。 为了保证良好的出行体验&#xff0c;这次团队招募人数…

Vue+OpenLayers7入门专栏目录,OpenLayers7中文文档,OpenLayers7中文手册api,OpenLayers7中文教程

返回入门到实战汇总目录&#xff1a;汇总目录 前言 本篇作为《VueOpenLayers7入门教程》所有文章的二合一汇总目录&#xff0c;方便查找。 本专栏源码是由OpenLayers7.x版本结合Vue框架编写。本专栏基本上每章都有详细的源代码和运行示例以供参考&#xff0c;且保证每章代码都…

【论文精读】Attention is all you need

摘要 主要的序列转换模型是基于复杂的循环或卷积神经网络&#xff0c;其中包括一个编码器和一个解码器。性能最好的模型还通过一种注意力机制将编码器和解码器连接起来。我们提出了一种新的简单的网络架构&#xff0c;Transformer&#xff0c;完全基于注意机制&#xff0c;完全…

每日学习笔记:C++ STL算法之容器元素排序

目录 常规排序 升序排序&#xff1a; sort(beg, end) stable_sort(beg, end, op) 自定义规则排序&#xff1a; sort(beg, end, op) stable_sort(beg, end, op) 局部排序(使前段有序) partial_sort(beg, sortEnd, end) partial_sort(beg, sortEnd, end, op) 复制并局…

【C++】日期类Date(详解)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 日期类 日期类实现地图 获取某年某月的天数&#xff1a;GetMonthDay 检查日期合法&#xff0c;构造函数&#xff0c;拷贝构造函数&#xff0c;赋值运算符重载及析构函数…