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
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框架入门篇,转载请注明来源!