覆蓋 Cucumber 選項值
1. 概述
在本教程中,我們將學習三種不同的方法來覆寫 Cucumber 選項值。從優先權的角度來看,Cucumber 將解析並覆寫以下選項:
- 系統屬性、環境變數和
cucumber.properties
文件 -
@CucumberOptions
註解 - CLI 參數
為了展示每種方法,我們將執行一個包含兩個場景的簡單功能文件,並覆寫 Cucumber tags
選項。
2. 設定
在使用每種方法之前,我們需要進行一些初始設定。首先,讓我們加入[cucumber-java](https://mvnrepository.com/artifact/io.cucumber/cucumber-java) , [cucumber-junit](https://mvnrepository.com/artifact/io.cucumber/cucumber-junit) , [cucumber-spring](https://mvnrepository.com/artifact/io.cucumber/cucumber-spring) ,
和[junit-vintage-engine](https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine)
依賴項:
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.14.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.14.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>7.14.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
接下來,讓我們實作一個具有兩個端點的簡單控制器:
@RestController
public class HealthCheckController {
@GetMapping(path = "/v1/status", produces = APPLICATION_JSON_VALUE)
public HttpStatus getV1Status() {
return ResponseEntity.ok().build().getStatusCode();
}
@GetMapping(path = "/v2/status", produces = APPLICATION_JSON_VALUE)
public HttpStatus getV2Status() {
return ResponseEntity.ok().build().getStatusCode();
}
}
我們現在可以新增功能檔和兩個場景:
Feature: status endpoints can be verified
@v1
Scenario: v1 status is healthy
When the client calls /v1/status
Then the client receives 200 status code
@v2
Scenario: v2 status is healthy
When the client calls /v2/status
Then the client receives 200 status code
最後,我們添加所需的 Cucumber 膠水代碼:
@When("^the client calls /v1/status")
public void checkV1Status() throws Throwable {
executeGet("http://localhost:8082/v1/status");
}
@When("^the client calls /v2/status")
public void checkV2Status() throws Throwable {
executeGet("http://localhost:8082/v2/status");
}
@Then("^the client receives (\\d+) status code$")
public void verifyStatusCode(int statusCode) throws Throwable {
final HttpStatus currentStatusCode = latestResponse.getStatusCode();
assertThat(currentStatusCode.value(), is(statusCode));
}
預設情況下,如果沒有另外指定,Cucumber 會執行所有場景。讓我們透過執行測試來驗證此行為:
mvn test
正如預期的那樣,這兩種情況都會被執行:
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
我們現在準備好討論覆蓋 Cucumber 選項值的三種不同方法。
3.使用cucumber.properties
文件
第一種方法從系統屬性、環境變數和cucumber.properties
檔案載入 Cucumber 選項。
讓我們將cucumber.filter.tags
屬性加入cucumber.properties
檔案:
cucumber.filter.tags=@v1
這次運行測試將只執行@v1
場景:
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
4.使用@CucumberOptions
註解
第二種方法使用@CucumberOptions
註釋。讓我們新增tags
欄位:
@CucumberOptions(tags = "@v1")
再次執行測試將僅執行@v1
場景:
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
請注意,此方法將覆寫使用系統屬性、環境變數和cucumber.properties
檔案中的值提供的任何值。
5. 使用 CLI 參數
最後一種方法使用 Cucumber CLI 來運行程式和tags
參數。確保使用正確的類別路徑,以便它包含已編譯的類別和資源以及所有依賴項(包括具有test
範圍的依賴項):
java -cp ... io.cucumber.core.cli.Main --tags @v1
正如預期的那樣,僅執行@v1
場景:
1 Scenarios (1 passed)
2 Steps (2 passed)
請注意,此方法將覆寫透過cucumber.properties
檔案或@CucumberOptions annotation
提供的任何值。
六,結論
在本文中,我們學習了三種覆寫 Cucumber 選項值的方法。
第一種方法考慮作為系統屬性、環境變數和cucumber.properties
檔案中的值提供的選項。第二種方法考慮作為@CucumberOptions
註釋中的欄位提供的選項,並覆寫第一種方法提供的任何選項。最後一個方法使用 CLI 參數並覆寫使用前面任何方法提供的選項。
像往常一樣,完整的程式碼可以在 GitHub 上找到。