將列表作為 Cucumber 參數傳遞
一、簡介
Cucumber 是行為驅動開發 (BDD) 中的一種流行工具,用於用簡單的語言編寫測試場景。利用 Cucumber 中的參數可以進行動態且可重複使用的測試。
在本文中,我們將討論在 Java 測試中使用 Cucumber 參數的基本技術。
2.了解黃瓜參數
Cucumber 參數是功能檔中的佔位符,允許使用不同的輸入執行場景。
這是一個說明字串參數的基本範例:
Feature: User Login
Scenario: User logs into the system
Given the user enters username "john_doe" and password "password123"
When the user clicks on the login button
Then the dashboard should be displayed
步驟定義使用註解捕獲這些參數:
public class LoginSteps {
private static final Logger logger = LoggerFactory.getLogger(LoginSteps.class);
@Given("the user enters username {string} and password {string}")
public void enterUsernameAndPassword(String username, String password) {
logger.info("Username: {}, Password: {}", username, password);
}
@When("the user clicks on the login button")
public void clickLoginButton() {
logger.info("Login button clicked");
}
@Then("the dashboard should be displayed")
public void verifyDashboardDisplayed() {
logger.info("Dashboard displayed");
}
}
在這裡,我們定義與特徵文件中的每個步驟相對應的步驟定義。 @Given
、 @When
和@Then
註釋捕捉場景中指定的參數並將它們傳遞給相應的方法。
3.使用DataTable
作為清單參數
DataTable
允許使用多組資料進行測試。
讓我們看一個如何使用DataTable
的範例:
Scenario: Verify user login with multiple accounts
Given the user tries to log in with the following accounts:
| username | password |
| john_doe | password1 |
| jane_smith | password2 |
When each user attempts to log in
Then each user should access the system successfully
我們使用自訂物件清單來處理DataTable
:
public class DataTableLoginSteps {
private static final Logger logger = LoggerFactory.getLogger(DataTableLoginSteps.class);
@Given("the user tries to log in with the following accounts:")
public void loginUser(List<UserCredentials> credentialsList) {
for (UserCredentials credentials : credentialsList) {
logger.info("Username: {}, Password: {}", credentials.getUsername(), credentials.getPassword());
}
}
public static class UserCredentials {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
}
在此範例中,我們使用DataTable
類別將資料表從功能檔案對應到UserCredentials
物件清單。這使我們能夠迭代列表並單獨處理每組憑證。
4. 使用正規表示式
正規表示式(regex)允許靈活的參數匹配。讓我們考慮以下電子郵件驗證範例:
Scenario: Verify email validation
Given the user enters email address "[email protected]"
When the user submits the registration form
Then the email should be successfully validated
我們使用步驟定義捕獲電子郵件地址參數:
public class RegexLoginSteps {
private static final Logger logger = LoggerFactory.getLogger(RegexLoginSteps.class);
@Given("the user enters email address \"([^\"]*)\"")
public void enterEmailAddress(String emailAddress) {
logger.info("Email: {}", emailAddress);
}
}
在這裡,我們使用正規表示式來捕獲電子郵件地址參數。正規表示式\”([^\”]*)\”
符合任何用雙引號括起來的字串,使我們能夠處理動態電子郵件地址。
5. 使用自訂變壓器
自訂轉換器將輸入字串轉換為特定的 Java 類型。讓我們來看一個例子:
Scenario: Verify date transformation
Given the user enters birthdate "1990-05-15"
When the user submits the registration form
Then the birthdate should be stored correctly
接下來,讓我們定義處理資料轉換的步驟定義:
public class LocalDateTransformer {
private static final Logger logger = LoggerFactory.getLogger(LocalDateTransformer.class);
@ParameterType("yyyy-MM-dd")
public LocalDate localdate(String dateString) {
return LocalDate.parse(dateString);
}
@Given("the user enters birthdate {localdate}")
public void enterBirthdate(LocalDate birthdate) {
logger.info("Birthdate: {}", birthdate);
}
}
在此方法中,我們使用@ParameterType
註解定義自訂轉換器。該轉換器將“ yyyy-MM-dd
”格式的輸入字串轉換為LocalDate
對象,允許我們直接在步驟定義中使用日期對象。
六,結論
在 Cucumber 中將列表作為參數傳遞可以增強我們有效測試各種資料集的能力。無論我們使用DataTable
、正規表示式或自訂轉換器,目標都是一致的:簡化測試過程並確保全面覆蓋。
像往常一樣,我們可以在 GitHub 上找到完整的原始碼和範例。