cucumber自動化測試(環境搭建入門)

      cucumber做爲BDD(行爲驅動測試)的自動化測試工具,能夠很好的幫助進行功能測試。它將功能拆分爲一個個的場景(能夠理解爲小功能點),每一個場景內能夠獨立的作數據初始,而後再對初始的數據進行測試,檢測是否達到預期的效果。下面將從java的角度,對cucumber的使用進行說明。爲了方便起見,這邊只對代碼作簡單的說明,完整的代碼在最後以連接的形式提供下載。)java

1、例子說明正則表達式

下面對職員的新增和根據年齡搜索知足條件的職員進行測試,幾個類的代碼以下:api

首先定義的職員的model:jvm

package com.zzq.test.cucumber.staff;

import java.io.Serializable;

public class Staff implements Serializable {

	private static final long serialVersionUID = -1617670200520139146L;
	private String name;
	private int age;
	private String address;
	
	public Staff(){
		
	}
	
	public Staff(String name, int age, String address) {
		super();
		System.out.println("init data,name:"+name+",age:"+age+",address:"+address);
		this.name = name;
		this.age = age;
		this.address = address;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

緊接着寫了個職員的操做類StaffManager,以下:工具

package com.zzq.test.cucumber.staff;

import java.util.ArrayList;
import java.util.List;

public class StaffManger {

	private List<Staff> staffList = new ArrayList<Staff>();
	
	public void addStaff(Staff staff){
		staffList.add(staff);
	}
	
	public List<Staff> findByAge(int min,int max){
		List<Staff> retList = new ArrayList<Staff>();
		for(Staff staff:staffList){
			if(staff.getAge()>=min&&staff.getAge()<=max){
				retList.add(staff);
			}
		}
		
		return retList;
	}
	
}

接着對StaffManager的測試步驟(方法)進行定義,其中@Given的部分表明爲測試執行的時候會調用初始的,@Then的部分表明測試的時候會用於檢驗數據/邏輯是否正確:測試

package com.zzq.test.cucumber.staff;
import java.util.List;

import org.junit.Assert;

import com.zzq.test.cucumber.staff.Staff;
import com.zzq.test.cucumber.staff.StaffManger;

import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;

public class StaffSteps {

	private StaffManger manager = new StaffManger();
	
	@Given("姓名:(.+),年齡:(\\d+),地址:(.+)")
	public void addStaff(String name,int age,String address){
		Staff staff = new Staff(name,age,address);
		manager.addStaff(staff);
	}
	
	@Then("年齡在(\\d+)~(\\d+)的職員有(\\d+)個")
	public void findByAge(int min,int max,int size){
		List<Staff> list = manager.findByAge(min, max);
		Assert.assertEquals(list.size(), size);
	}
}

接下來定義場景Staff.feature,Given的部分與上面步驟定義的@Given對應,經過正則表達式來匹配;Then的部分與上面的@Then部分匹配。:this

Feature:測試職工相關的功能

Scenario:測試根據年齡查找職工
Given 姓名:漫天的沙,年齡:18,地址:廈門市思明區
And 姓名:小明,年齡:30,地址:北京市朝陽區
And 姓名:李雷,年齡:25,地址:漳州漳浦縣
And 姓名:小紅,年齡:20,地址:江西省
Then 年齡在20~30的職員有3個
Then 年齡在23~30的職員有2個

接下來寫一個測試的入口類:lua

package com.zzq.test.cucumber.staff;

import org.junit.runner.RunWith;

import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
public class StaffTest {

}

執行類,junit的運行結果以下:spa

控制檯執行結果以下:.net

2、分析

上述的代碼,首先入口類須要聲明@RunWith(Cucumber.class),該類存在於cucumber-junit的jar包內,聲明以後會自動搜索classpath下全部聲明爲@Given和@Then以及場景的文件。以後對搜索到的內容進行處理,根據@Given註解的內容到搜索到的場景文件的內容進行正則匹配,若是匹配到則調用該方法(正常狀況下用於數據初始);若是爲@Then註解,一樣的正則匹配查找,而後根據設置的參數match groups,設置對應的參數,而後傳參進行校驗。須要注意如下幾個事項:

(1)若是feature文件與測試的Steps類不在同個目錄下,須要經過@CucumberOptions註解進行指定,不然會找不到feature文件致使用例沒執行(不會報錯);

(2)feature文件中的Scenario、Given、And和Then均爲關鍵字。其中Scenario表明爲場景的開始,後能夠跟一句話進行描述;接下來定義Given,對數據進行初始化;接着定義Then,Then用於校驗的時候使用。

完整代碼:完整代碼

相關文章
相關標籤/搜索