環境搭建
- jdk 1.8 以上版本
- maven 3.3 以上版本
項目結構
本項目是以java+maven+junit作為cucumber的驅動框架
最簡單的目錄結構大概是這樣子的:
目錄結構
-
src\main
:存放一些與cucumber無關的代碼,主要用于輔助測試的,比如一些測試數據準備等等。 -
src\test\java
:存放step的定義類和testsuit類,該目錄下沒有結構和命名規定,可以隨意定義。 -
src\test\resources
:存放feature文件。 - 注意:如果step定義文件放在
src\test\java\features
下,那feature文件一定要放在src\test\resources\features
路徑下,否則將報Undefined step
的錯誤。
依賴的包
-
pom.xml
要添加如下3個依賴:
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
</dependency><dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
cucumber用例寫法
LoginTest.feature的寫法:
Feature: 登錄
"""
這是一個栗子
"""
Scenario: 作為一個已注冊的用戶,輸入正確的賬號和密碼能正常登錄
Given 存在用戶賬號為 13800138000 ,密碼為 12345678
When 用賬號 13800138000 ,密碼 12345678 登錄
Then 返回結果為 登錄成功-
Stepdefs.java的寫法,里面的方法名可以隨意定義:
package features;import com.gateway.DataFactory; import com.gateway.UserProto; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import org.assertj.core.api.Assertions; /** * Created by wuwx on 2016/8/6. */ public class Stepdefs { String loginResult = null; @Given("^存在用戶賬號為 (\\S*) ,密碼為 (\\S*)$") public void hasUser(String phone, String password) throws Throwable { DataFactory df = new DataFactory(); df.createUser(phone, password); } @When("^用賬號 (\\S*) ,密碼 (\\S*) 登錄$") public void login(String phone, String password) throws Throwable { loginResult = UserProto.login(phone, password).getDescription().getContent(); } @Then("返回結果為 (\\S*)") public void checkResult(String expect) throws Throwable{ Assertions.assertThat(loginResult).isEqualTo(expect); } }
-
RunLoginTest.java的寫法,方法名可以隨意定義,features屬性需要定義該testsuit想要執行的features文件的路徑:
package features;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;/** * Created by wuwx on 2016/8/6. */ @RunWith(Cucumber.class) @CucumberOptions(monochrome = true, features = "src/test/resources/features/") public class RunLoginTest{ }
運行測試
- 運行單個用例
-
運行單個用例,可以直接選中某個feature文件,右鍵run:
運行單個用例 -
測試結果可以在控制臺看到,如果失敗了,會列出詳細情況:
測試結果
- 運行一個testsuit
-
可以直接選中某個RunLoginTest文件,右鍵run,即可運行
運行testsuit
- 運行整個項目,并生成總體的測試報告
- 生成報告,需要在RunLoginTest.java里面添加一些plugin屬性,"html:target/cucumber-report/"指定生成的html報告路徑:
@CucumberOptions(monochrome = true,
features = "src/test/resources/features/",
plugin ={"pretty",
"html:target/cucumber-report/",
"json:target/cucumber-report/cucumber.json"
}) - 配好了之后,執行IDE的maven插件test,或者在命令行下執行
mvn clean test
即可
*報告如下圖,綠色是通過,其他顏色是不通過
cucumber原生html報告