Cucumber框架入门篇

Cucumber介绍

Cucumber是一个支持BDD(Behavior Driven Development),即行为驱动开发的自动化测试框架。在进行单元测试或者集成测试之前,事先将测试的步骤和验证信息用通用的语言(英语)定义好,使得测试的步骤、单元测试和集成测试每一步执行的目的能被非开发人员读懂,并且写单元测试和集成测试的人员可以依据事先写好的框架进行代码的编写,达到行为驱动开发的目的。

Cucumber框架的搭建

1. 将Cucumber插件导入eclipse中,此处同其他插件导入方法相同,不作说明。

2. 新建Java工程,将Cucumber所需要的jar包导入Java工程中(最好新建一个文件夹,将jar包放到该文件夹下)。

3.通过Build Path添加刚导入的JARs

4. 新建用来定义步骤的feature格式的文件,新建的feature格式文件会自动填写模板文件,具体使用方法后续说明。同上,最好将其放在特定的文件夹里,本例为Feature文件夹。


5. 将被测试的包导入Java工程中,本例测试一个简单的Calculator类。

6. 新建一个包,包名必须为test.java或main.java否则后续创建Cucumber定义步骤时会出错。

7. 在test.java包中新建一个Step-Definition class。


Cucumber框架相关文件及其内容的说明

1. .feature文件

定义了测试的步骤,包括以下几个关键字

  • Feature:一个.feature文件有且仅有一个Feature关键字。描述要测试的对象,一般为测试标题。
  • Scenario:一个.feature文件可以有0个或多个Scenario关键字。测试对象的场景,如测试Add( )方法,可以有两个整数相加和两个负数相加等多种场景。
  • Given:一个.feature文件有且仅有一个Given关键字。相当于测试用例中的预置条件。如想要表达多个预置条件,可以通过And关键字添加。
  • When:一个.feature文件有且仅有一个When关键字。具体的操作步骤,类似于测试用例中的操作步骤。如想要表达多个操作步骤,可以通过And关键字添加。
  • Then:一个.feature文件有且仅有一个Then关键字。相当于测试用例的中的预期结果。如想要表达多个预期结果,可以通过And关键字添加。
  • And:一个.feature文件可以有0个或多个And关键字。And元素可以补充额外的预置条件或操作步骤。
  • But:一个.feature文件可以有0个或多个But关键字。But和And一样,可以同Given、When、Then连用,用于添加否定类型的描述,一般只适用于负面条件。比如:
        THEN login should be successful.

        BUT home page should not be missing

  • Scenario Outline:一个.feature文件可以有0个或多个Scenario Outline关键字。用于场景中有多组数值时,必须配合Example一起使用,成对出现。
  • Examples:和Scenario Outline成对出现,其下有多组测试数值的列表

2. Step-definition文件

Cucumber的Step-definition和其他的java格式文件基本相同,但是在创建时可以根据需要选择性勾选并自动添加Give、When、Then、And、But注释。

完成后会自动生成一个java模板文件,包括了之前勾选的注释,本例勾选了Given、When、Then和And。注释的格式为:

@关键字("^******$")

@Given("^you are in Given annotation$")

关键字后括号里的内容必须和先前定义的.feature文件的关键字的内容一一对应,识别大小写并且包括空格数目等都要一样,以^开头,$结尾。注释之后为具体实现的方法,在方法中添加符合关键字后描述的操作的代码。

3. 测试执行文件

Cucumber的测试执行文件一般为一个空的Junit Test Case,即不需要Test注释,更不需要Before和After等注释。当必须添加RunWith注释和CucumberOptions注释。

RunWith注释每一个Cucumber框架的测试文件都是相同的,为RunWith(Cucumber.class)CucumberOption注释的内容是根据实际情况需要手动更改的。

CucumberOptions注释选项一般有featuresgluemonochromedryrun等。其中。featuresglue是必写项,monochromedryrun选填项。

features定义了.feature文件的相对路径,格式为features=“.feature文件在该工程的文件夹/.feature文件的名字”。eg. features="Feature/calculatorAdd.feature"

glue定义了Step-difinition的包名,格式为glue=”完整的包名”。eg. test.java.cucumberDefinition。

monochrome选项有两个值,分别为true和false,默认为false,格式为monochrome=boolean。用来控制测试结果的可读性,当monochrome=true时,测试结果可读性更好。monochrome=true时,测试结果可读性比较差。

dryrun选项暂时不了解。

Cucumber框架的使用

通过以上介绍,Cucumber框架基本搭建完成,对Cucumber各文件的作用也有所了解,接下来就是通过对框架的修改来实现一个简单的BDD模式的单元测试。

测试Calcualtor类中的Add( )成员方法

1. 新建testAdd.feature文件,并修改其内容

@tag
Feature: Test add function of calculator@tag1Scenario: Add two numbersGiven init the object of calculatorWhen clear the result to zeroAnd add num1 and num2Then check the actual result
2. 新建stepDefinition.java文件,使用Given、When、Then和And关键字,修改注释内容并根据注释内容填写方法中的代码。
package test.java.cucumberDefinition;import cucumber.api.java.en.Given;
import cucumber.api.java.en.When;
import cucumber.api.java.en.Then;import static org.junit.Assert.assertEquals;import com.calculator.Calculator;import cucumber.api.java.en.And;public class stepDefinition {Calculator cal;int result;@Given("^init the object of calculator$")public void given() throws Throwable {cal= new Calculator();}@When("^clear the result to zero$")public void when() throws Throwable {cal.clear();}@Then("^add num1 and num2$")public void then() throws Throwable {cal.add(2);cal.add(3);}@And("^check the actual result$")public void and() throws Throwable {int expected = 5;result = cal.getResult();assertEquals(expected,result);}}
3. 新建一个Junit Test Case,并将其内容清空,最后添加RunWith和CucumberOptions注释。
package com.calculator.test;import static org.junit.Assert.*;import org.junit.Test;
import org.junit.runner.RunWith;import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;@RunWith(Cucumber.class)
@CucumberOptions(features="Feature/calculatorAdd.feature",glue="test.java.cucumberDefinition",monochrome=true)
public class testAdd {}
4. 右键testAdd.java,执行run as junit case进行测试。

Cucumber框架进阶篇:https://blog.csdn.net/Cupupup/article/details/80154544

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

表和Json的相互操作

目录 一、表转Json 1.使用 for json path 2.如何返回单个Json 3.如何给返回的Json增加一个根节点呢 4.如何给返回的Json增加上一个节点 二、对Json基本操作 1.判断给的字符串是否是Json格式 2.从 JSON 字符串中提取标量值 3. 从 JSON 字符串中提取对象或数组 4. 更…

Linux内核的动态电压和电流控制接口(regulatordvfs)

Linux内核的动态电压和电流控制接口 前面已经提到半导体器件的功耗是两个部分组成,一是静态功耗,一是动态功耗。静态功耗主要来自待机状态的泄漏电流,相比而言动态功耗更大,例如,音视频播放中频率和电压的增加会让电量…

时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测

时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测 目录 时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现SSA-XGBoost时间序列预测,麻…

字节码操作的手术刀-Javassist

Javassist 前面文章介绍的 ASM 入门门槛还是挺高的,需要跟底层的字节码指令打交道,优点是小巧、性能好。Javassist 是一个性能比 ASM 稍差但是使用起来简单很多的字节码操作库,不需要了解字节码指令,由东京工业大学的数学和计算机…

Unittest 笔记:unittest拓展生成HTM报告

HTMLTestRunner 是一个unitest拓展可以生成HTML 报告 下载地址:GitHub: https://github.com/defnnig/HTMLTestRunner HTMLTestRunner是一个独立的py文件,可以放在Lib 作为第三方模块使用或者作为项目的一部分。 方式1: 验证是否安装成功&…

TSC TTP-244条码打印机如何批量打印二维码

二维码的应用可以说是非常的普遍了,二维码在应用之前不但需要条码打印机批量打印二维码,还需要相关的二维码制作软件制作二维码。今天小编就教大家用TSC TTP-244条码打印机批量打印二维码。 1、打开二维码制作软件,新建一个标签,选…

条码打印机如何打印流水号

流水号现在用途也是非常广泛的,应用于各行各业,今天小编就教大家如何用条码打印机打印流水号,操作也是非常简单,先用条码打印软件生成流水号,然后连接条码打印机打印流水号。 打开条码打印软件,新建标签&a…

条码打印软件如何连接激光打印机打印条码标签

在连接打印机打印条码标签之前,需要对条码打印软件有一个简单的了解,条码打印软件是通过驱动来连接各种打印机进行打印条码标签的,所以在连接激光打印机打印条码标签时,需要在电脑上安装通用激光打印机驱动。接下来我们看看过程。…

反转链表+交换两个链表的节点

目录 ​编辑 一,反转链表 1.题目描述 2.例子 3.题目接口 4.分析以及解题代码 1.迭代法 2.递归写法 二,两两交换两个链表中的节点 1.题目描述 2.例子 3.题目接口 4.题目分析以及解法 一,反转链表 1.题目描述 首先来看看反转链表的…

86. 分隔链表(中等系列)

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head [1,4,3,2,5,2], x 3 输出&…

hiredis的安装与使用

hiredis的介绍 Hiredis 是一个用于 C 语言的轻量级、高性能的 Redis 客户端库。它提供了一组简单易用的 API,用于与 Redis 数据库进行交互。Hiredis 支持 Redis 的所有主要功能,包括字符串、哈希、列表、集合、有序集合等数据结构的读写操作&#xff0c…

Docker vs. Podman: 选择容器技术的智慧之选

嗨,各位亲爱的程序员小伙伴们!当我们步入容器技术的世界,往往会在众多选择中迷茫。两个备受瞩目的容器工具,Docker 和 Podman,都在业界掀起了一股风潮。今天,我将带你深入探索,为什么在 Docker …

购买的gmail谷歌邮箱,faceboolhotmail邮箱mail邮箱yahoo,aol在国外使用完全不受影响,购买地址推荐:

购买的谷歌邮箱,faceboolhotmail邮箱mail邮箱yahoo,aol在国外使用完全不受影响,购买地址推荐:邮箱谷歌批发购买地址:buyemail.buyaccountemail.com记好了 登录方法如下 1、下载QQ邮箱手机客户端 2、先使用QQ邮箱登陆到客户端 谷歌邮箱 …

免费激活Yahoo邮箱的POP3服务

通过POP3,我们就能够在本机上使用各种邮件客户端软件(Foxmail、Outlook等)收发电子邮件。 Yahoo免费邮箱没有提供免费POP3服务,而通过邮箱里的设置激活该服务时则被提示需要收费。如图1所示 图1 笔者就给大伙介绍一个小技巧,可以免费地打开Ya…

Foxmail6下@yahoo.cn邮箱设置

http://www.88sina.com/foxmail-yahoo.cn/(转) 昨天申请了一个yahoo.cn的邮箱,在Foxmail中弄了半天,就是使用不了,不是提示输密码就是提示这样那样的错误,今天在网上找来找去,试来试去,终于可以正常收发邮件…

雅虎邮箱 找回密码_如何恢复被遗忘的Yahoo! 密码

雅虎邮箱 找回密码 If you don’t use a password manager, those complex passwords can be pretty hard to remember. If you’ve forgotten your Yahoo password, you can’t really recover that same password, but it’s easy enough to recover your account by resetti…

类似于yahoo邮箱登陆的提示效果

当鼠标聚焦到邮箱地址文本框时&#xff0c;文本框内的“请输入邮箱地址”文字被清空。 效果图&#xff1a; <% Page Language"C#" AutoEventWireup"true" CodeFile"类似于yahoo邮箱登陆的提示效果.aspx.cs" Inherits"类似于yahoo邮箱登…

java雅虎邮件发送

java雅虎邮件发送 1、在网页上登录雅虎邮箱-需翻墙2、登录成功后台&#xff0c;进入账号资料3、进入账户安全&#xff0c;开启双重验证4、创建应用5、替换配置中的邮箱密码即可使用 申请雅虎邮箱后&#xff1a; application.yml配置 spring:mail:host: smtp.mail.yahoo.compo…

【kubernetes】使用kubepshere部署中间件服务

KubeSphere部署中间件服务 入门使用KubeSphere部署单机版MySQL、Redis、RabbitMQ 记录一下搭建过程 (内容学习于尚硅谷云原生课程) 环境准备 VMware虚拟机k8s集群&#xff0c;一主两从&#xff0c;master也作为工作节点&#xff1b;KubeSphere k8skubesphere devops比较占用磁…