如何在不添加自定义后缀的情况下重复使用黄瓜小黄瓜步骤?
How to re-use cucumber gherkin steps without adding custom suffixes?
我第一次尝试同时学习黄瓜、小黄瓜和硒。我希望能够为各种 Given
和 And
语句重复使用步骤。我有一个方法,但感觉不对,因为我在我的小黄瓜语言中使用了独特的后缀来避免一些与重复规则相关的编译时错误。
下面是我所做的一个简短示例,目前有效,但并不理想。
// account.feature
Feature: Account
Scenario: Can access account
Given Reset database with mock data
And Login as admin ##and##
When Go to account
Then Confirm email exists
// automobile.feature
Feature: Automobile
Scenario: Can access automobile
Given Login as admin
When Go to first automobile
Then Confirm automobile name exists
// LoginSteps.java
package StepDefinitions;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.And;
public class LoginSteps {
public LoginSteps() throws Throwable {
}
@Given ("Reset database with mock data")
public void resetDatabaseWithMockData() throws IOException {
URL url = new URL("http://example.com/setup");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("GET Response Code :: " + responseCode);
}
@Given("Login as admin")
public void givenLoginAdmin() throws Throwable {
loginAdmin();
}
@And("Login as admin ##and##")
public void andLoginAdmin() throws Throwable {
loginAdmin();
}
public void loginAdmin() throws Throwable {
// login as admin code
}
}
简而言之,我有两个特征文件account.feature
和automobile.feature
。我希望 account.feature
首先触发,然后是 automobile.feature
。请注意,这两个功能文件都需要您 Login as admin
,但只有 account.feature
需要我用一些模拟数据重置数据库。因此,在 account.feature
中,我有一个 Login as admin ##and##
,而在 automobile.feature
中,我只有 Login as admin
.
我觉得这不对。我的总体 objective 是我想要几个 *.feature
文件 运行 他们针对 mock data set1
的测试,然后是另一组功能文件 运行 他们的测试又是一个 mock data set 2
.
谁能告诉我是否有更好的方法来实现我的结果?
原则上,您应该将测试设计为彼此独立。这可能意味着为每个场景登录。这可能意味着 re-starting 你对每个场景的应用。这可能意味着为每个场景创建新数据。
这可能看起来很浪费,特别是如果您以前编写过手动测试脚本,但如果使用自动化,它应该足够快,您可以负担得起独立的测试执行。
所以像这样:
Given a new tennant of automobile website
And a new account "admin" with the admin role
And a registrered automobile "Ford 1"
When I the "admin" opens the automobile page
Then the automobile page contains a "Ford 1".
这是假设汽车网站是multi-tennant。如果没有,您可能必须为每个场景启动一个新的应用程序。
我第一次尝试同时学习黄瓜、小黄瓜和硒。我希望能够为各种 Given
和 And
语句重复使用步骤。我有一个方法,但感觉不对,因为我在我的小黄瓜语言中使用了独特的后缀来避免一些与重复规则相关的编译时错误。
下面是我所做的一个简短示例,目前有效,但并不理想。
// account.feature
Feature: Account
Scenario: Can access account
Given Reset database with mock data
And Login as admin ##and##
When Go to account
Then Confirm email exists
// automobile.feature
Feature: Automobile
Scenario: Can access automobile
Given Login as admin
When Go to first automobile
Then Confirm automobile name exists
// LoginSteps.java
package StepDefinitions;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.And;
public class LoginSteps {
public LoginSteps() throws Throwable {
}
@Given ("Reset database with mock data")
public void resetDatabaseWithMockData() throws IOException {
URL url = new URL("http://example.com/setup");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("GET Response Code :: " + responseCode);
}
@Given("Login as admin")
public void givenLoginAdmin() throws Throwable {
loginAdmin();
}
@And("Login as admin ##and##")
public void andLoginAdmin() throws Throwable {
loginAdmin();
}
public void loginAdmin() throws Throwable {
// login as admin code
}
}
简而言之,我有两个特征文件account.feature
和automobile.feature
。我希望 account.feature
首先触发,然后是 automobile.feature
。请注意,这两个功能文件都需要您 Login as admin
,但只有 account.feature
需要我用一些模拟数据重置数据库。因此,在 account.feature
中,我有一个 Login as admin ##and##
,而在 automobile.feature
中,我只有 Login as admin
.
我觉得这不对。我的总体 objective 是我想要几个 *.feature
文件 运行 他们针对 mock data set1
的测试,然后是另一组功能文件 运行 他们的测试又是一个 mock data set 2
.
谁能告诉我是否有更好的方法来实现我的结果?
原则上,您应该将测试设计为彼此独立。这可能意味着为每个场景登录。这可能意味着 re-starting 你对每个场景的应用。这可能意味着为每个场景创建新数据。
这可能看起来很浪费,特别是如果您以前编写过手动测试脚本,但如果使用自动化,它应该足够快,您可以负担得起独立的测试执行。
所以像这样:
Given a new tennant of automobile website
And a new account "admin" with the admin role
And a registrered automobile "Ford 1"
When I the "admin" opens the automobile page
Then the automobile page contains a "Ford 1".
这是假设汽车网站是multi-tennant。如果没有,您可能必须为每个场景启动一个新的应用程序。