编辑推荐:

本文来自于csdn,本文主要介绍如何搭建Cucumber框架,以及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注释选项一般有features、glue、monochrome和dryrun等。其中。features和glue是必写项,monochrome和dryrun选填项。

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

@tag1

Scenario: Add two numbers

Given init the object of calculator

When clear the result to zero

And add num1 and num2

Then 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进行测试。

java cucumber_Cucumber框架入门篇相关推荐

  1. layui框架入门篇

    layui框架入门篇(一)--引入 layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用.其 ...

  2. Java新手小白入门篇 Java基础(一)

    Java新手小白入门篇 Java基础 Java新手小白入门篇 Java基础(知识点体系汇总) Java新手小白入门篇 Java基础(一) Java新手小白入门篇 Java基础(二) Java新手小白入 ...

  3. Cucumber框架入门篇

    Cucumber介绍 Cucumber是一个支持BDD(Behavior Driven Development),即行为驱动开发的自动化测试框架.在进行单元测试或者集成测试之前,事先将测试的步骤和验证 ...

  4. Java Spring框架入门详解教程【多测师_何sir】

    Spring框架入门详解教程 spring概述 spring结构 spring IOC spring DI spring概述 Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多 ...

  5. JAVA三大框架入门(学习)

    一.基本概念 了解框架的定位可以帮助我们更好的找到学习的切入点 1.Spring 依赖注入(DI)又称为控制反转(IOC),通常来说,当某个角色需要另一个角色才能正常运行时,通常是由调用者来创建被调用 ...

  6. 《Java从入门到放弃》框架入门篇:hibernate中的多表对应关系(二)

    前一篇讲完了一对多的关系,通过与JDBC对比应该能发现,是不是比JDBC简单了很多? 我们只需要把对象只间的包含或对应关系理清楚,完全不用我们自己来写SQL语句.所以使用hibernate框架后,我们 ...

  7. Java框架入门篇——Spring

    文章目录 前言 1.Spring是什么? 2.Spring 的优点? 3.Spring的IoC理解 4.Spring的AOP理解 5.BeanFactory和ApplicationContext有什么 ...

  8. 《Java从入门到放弃》框架入门篇:hibernate基本配置

    hibernate是个什么玩意呢?简单点说,就是别人写好的一套访问数据库的东东,底层其实就是JDBC. 使用JDBC就像以前没有电饭煲,我们要自己根据经验,多少人煮多少米,放多少水,用多大的火,煮多长 ...

  9. 《Java从入门到放弃》框架入门篇:hibernate基本用法

    昨天我们进行了hibernate的配置,并且进行了根据ID查询对应数据的操作,今天我们来看看hibernate中的几个配置文件,里面到底有什么东东. 一.hibernate.cfg.xml <h ...

  10. java shiro登录实例_Shiro安全框架入门篇(登录验证实例详解与源码)

    转载自http://blog.csdn.net/u013142781 一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和J ...

最新文章

  1. 移动硬盘与电脑连接后 计算机中找不到,移动硬盘联接上电脑,可是打开我的电脑却找不到移动硬盘。...
  2. xx学OD -- 消息断点 RUN跟踪(下)
  3. jquery中的事件和动画
  4. TOPSIS(逼近理想解)算法原理详解与代码实现
  5. 计算机网络--详述OSI七层模型与TCP/IP五层模型
  6. system health_可重复使用的MicroProfile Health探针
  7. IIS 7.0 安装SSL证书过程
  8. 智能小车二十《摄像头和路由器装上小车》
  9. python元组及文件
  10. 2010年IT领域的十大收购
  11. 超详细Java安装教程,小白速来!!!
  12. CSS中文字体对照表
  13. vs2019,C#,MySQL创建图书管理系统3(管理员相关页面的布局和设计实现,图书显示,图书添加)
  14. 斐波那契序列的实现方法及对比
  15. 最后的舞,请与我一起跳
  16. AspectJ的Execution表达式
  17. pta 吃鱼还是吃肉 c语言
  18. AltiumDesigner 18 3D模式操作
  19. 深入浅出聊Unity3D项目优化:从Draw Calls到GC (难度2 推荐5)
  20. 基于完全分布式Hadoop -hive安装

热门文章

  1. 【Qt开发】关于QWSServer
  2. UIView中的坐标转换
  3. c++中sort()及qsort()的使用方法总结
  4. php中url传递中文字符,特殊危险字符的解决方法
  5. Linux环境进程间通信(一)管道和FIFO
  6. .Net1.x转换为.Net 2.0要注意的几个问题
  7. @RequestBody 的使用方法和注意事项
  8. Java 反射Reflection总结一
  9. html2canvas关于图片不能正常截取 1
  10. iOS,Core Graphics