自动化测试之cucumber.md

2023-10-11 20:20
文章标签 测试 自动化 md cucumber

本文主要是介绍自动化测试之cucumber.md,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

cucumber是BDD(Behavior-driven development,行为驱动开发)的一个自动化测试的副产品。它使用自然语言来描述测试,使得非程序员可以理解他们。Gherkin是这种自然语言测试的简单语法,而Cucumber是可以执行它们的工具。关于BDD有兴趣自行了解。附cucumber官网链接,里面也有关于BDD的信息。
cucumber本质上是使用根据正则表达式匹配自然语言,然后依次执行对应的方法,以达到测试的目的。

二、安装

cucumber支持JDK8,创建一个mvn工程,在pom.xml文件引入以下依赖即可。
另外如果测试框架采用的是junit,则需要多一个cucumber-junit。
如果集成spring,则还需要引入cucumber-spring
   <dependency><groupId>info.cukes</groupId><artifactId>cucumber-java</artifactId><version>1.2.4</version><scope>test</scope></dependency><dependency><groupId>info.cukes</groupId><artifactId>cucumber-junit</artifactId><version>1.2.4</version><scope>test</scope></dependency><dependency><groupId>info.cukes</groupId><artifactId>cucumber-spring</artifactId><version>1.2.4</version><scope>test</scope></dependency>
也可以根据mvn骨架创建cucumber项目。打开终端,转到要创建项目的目录(比如本文是hellocucumber),运行以下命令
   mvn archetype:generate                  -DarchetypeGroupId=io.cucumber           -DarchetypeArtifactId=cucumber-archetype -DarchetypeVersion=2.3.1.2               -DgroupId=hellocucumber                  -DartifactId=hellocucumber              -Dpackage=hellocucumber                  -Dversion=1.0.0-SNAPSHOT                 -DinteractiveMode=false
应该得到如下结果:
    [INFO] Project created from Archetype in dir:   hellocucumber/cucumber[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------
但是不支持jdk8 U51之后的新版本!每次都报错说"Wrong type at constant pool index"。

三、基本语法

3.1 Gherkin

Cucumber 执行 .feature 文件,而这些文件包含可执行的规范,用被称为 Gherkin 的语言写成。.featur文件一般放在src/test/resources/[项目名称xxx]目录下或者其子目录下。Gherkin 是带有一点额外结构的纯文本的英文(或者替他60多种语言). Gherkin 设计为容易被非编程人员学习,但有足够的组织结构来容许简洁的范例描述,以说明大多数实际领域中的业务规则。
下面是一个简单的.feature 文件的例子
    Feature: Refund itemScenario: Jeff returns a faulty microwaveGiven Jeff has bought a microwave for $100And he has a receiptWhen he returns the microwaveThen Jeff should be refunded $100
在 Gherkin 中, 每行必须以 Gherkin 关键字开头, 然后跟随有任意的文本。主要的关键字有:
  • Feature / 特性

  • Scenario / 场景

  • Given, When, Then, And, But (Steps/步骤)

  • Background / 背景

  • Scenario Outline / 场景大纲

  • Examples / 示例

    还有其他一些额外的关键字:

  • “”" (Doc Strings)

  • | (Data Tables)

  • @ (Tags)

  • # Comments


3.2 Feature / 特性

.feature 文件用来描述系统的一个单一特性,或者某个特性的一个独特方面。这仅仅是一个提供软件特性的高级描述的方法,并用于组织相关的场景(scenarios)。
feature有三个基本元素:
1.Feature: 关键字
2.name: 名称, 在同一行
3.description:描述, 可选(但是强烈推荐),可以占据多行   
例如:
Feature: Refund itemSales assistants should be able to refund customers' purchases.This is required by the law, and is also essential in order tokeep customers happy.Rules:- Customer must present proof of purchase- Purchase must be less than 30 days ago

3.3 Scenario / 场景

Scenario 是具体的实例,描述一个业务规则。它由步骤列表组成。
可以有任意多个步骤,但是推荐数量保持在每个场景3-5个步骤。如果太长,他们将丧失作为规范和文档的表单能力。
在作为规范和文档之外,场景也同样是测试。作为一个整体,场景是系统的可执行规范。
场景遵循同样的模式:
1、 描述一个初始化上下文
2、 描述一个时间
3、 描述一个期望的产出

3.4 Steps / 步骤

步骤通常以 Given, When 或 Then 开头。如果有多个 Given 或者 When 步骤连在一
起,可以使用 And 或者 But。Cucumber不区分这些关键字,但是选择正确的关键字对于
场景整体的可读性很重要。

3.5 Given / 假设

Given 步骤用于描述系统的初始化上下文 - 场景的一幕(scene of Scenario)。它通常是某些已经发生在过去的东西。
当cucumber执行 Given 步骤时,它将配置系统到一个定义良好的状态,例如创建并配置对象或者添加数据到测试数据库。
可以有多个 Given 步骤(可以使用 And 或者 But 来变的更可读)

3.6 Then / 那么

Then 步骤用于描述期望的产出,或者结果。
Then 步骤的 步骤定义 应该使用断言来比较实际产出(系统实际行为)和期待产出(步骤所述的系统应有的行为)

3.7 Background / 背景

发现一个feature文件中的所有场景都在重复同样的 Given 步骤。既然它在每个场景
可以将这样的 Given 步骤移动到background中,在第一个场景之前,用一个 Background 块组织他们:
    Background:Given a $100 microwave was sold on 2015-11-03And today is 2015-11-18

3.8 Scenario Outline / 场景大纲

当有复杂业务规则,带有多个输入或者输出,可以最终创建仅仅是值有差别的多个场景。举个例子:
    Scenario: feeding a small suckler cowGiven the cow weighs 450 kgWhen we calculate the feeding requirementsThen the energy should be 26500 MJAnd the protein should be 215 kgScenario: feeding a medium suckler cowGiven the cow weighs 500 kgWhen we calculate the feeding requirementsThen the energy should be 29500 MJAnd the protein should be 245 kg# 还有两个例子 --- 已经令人厌烦了
如果有很多例子,将会很乏味。可以通过使用场景大纲来简化:
    Scenario Outline: feeding a suckler cowGiven the cow weighs <weight> kgWhen we calculate the feeding requirementsThen the energy should be <energy> MJAnd the protein should be <protein> kgExamples:| weight | energy | protein ||    450 |  26500 |     215 ||    500 |  29500 |     245 ||    575 |  31500 |     255 ||    600 |  37000 |     305 |
这更易于阅读。场景大纲步骤中的变量通过使用 < 和 > 来标记。

3.9 Examples / 示例

场景大纲部分总被带有一个或者多个 Examples / 示例 部分,用于包含一个表格。
表格必须有header 行,对应场景大纲步骤中的变量。
下面的每一行将创建一个新的场景,使用变量的值填充。

3.10 执行步骤

当cucumber执行场景中的步骤时,它将查找匹配的步骤定义来执行。
步骤定义是带有正则表达式的小段代码。正则表达式用于连接步骤定义到所有匹配的步骤,而代码是cucumber要执行的内容。
例如一下场景:
    Scenario: Some cukesGiven I have 48 cukes in my belly
步骤的 I have 48 cukes in my belly 部分(Given关键字后面的文本)将匹配下面的步骤定义:
    @Given("I have (\\d+) cukes in my belly")public void I_have_cukes_in_my_belly(int cukes){System.out.format("Cukes: %n\n", cukes);}
当cucumber匹配步骤到一个步骤定义中的正则表达式时,它传递所有捕获组(capture group)的值到步骤定义的参数。捕获组是字符串(即使他们匹配数字如 \d+ )。对于静态类型语言,cucumber将自动转换这些字符串到合适的类型。对于动态类型语言,默认不转换,因为他们没有类型信息。
Cucumber不区分这五个步骤关键字 Given, When, Then, And 和 But。

四、实践

4.1编写.feature文件

在这里插入图片描述
.features文件一般放在test/resources/features目录下。
图中使用的是中文来编写的,这样写的前提是在首行加上 # language: zh-CN
一个场景为一个执行单位,一般用于测试一个接口。每个步骤都会通过正则匹配一个方法。
步骤写好后,鼠标点击黄色色块上,按下自动提示快捷键,编译器会提示定义step。按提示创建即可。

4.2编写步骤steps类

如下图:

在这里插入图片描述
图中@cucumber.api.java.zh_CN报红,只要将cucumber.api.java.zh_CN删除,重新导入即可。或者将CN改为小写的cn。
steps类一般放在test/java/项目包名/目录下的一个文件夹中。
每个方法中编写测试代码,去测试某个接口。接口的访问可以使用RestTemplate。使用Assert判断接口返回是否与预期的一样。

一个完整的场景,包括以下几个步骤:
1、新建测试数据
2、调用接口进行测试
3、删除测试数据
这样可以重复测试,不会产生多余的测试数据。

4.3 启动测试

启动测试有两种方法,
1、右键.feature文件,选择Debug Feature执行
2、如下图,编写测试类去启动@CucumberOptions注解的features属性对应.feature文件

在这里插入图片描述

这篇关于自动化测试之cucumber.md的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依