我第一次尝试同时学习黄瓜、小黄瓜和硒。 我希望能够重复使用各种
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
。
这对我来说感觉不对。 我的总体目标是,我希望有几个
*.feature
文件针对 mock data set1
运行测试,然后另一组功能文件再次运行 mock data set 2
测试。
谁能告诉我是否有更好的方法来实现我的结果?
原则上,您应该将测试设计为彼此独立。这可能意味着每个场景都要登录。这可能意味着为每个场景重新启动您的应用程序。这可能意味着为每个场景创建新数据。
这可能看起来很浪费,特别是如果您之前编写过手动测试脚本,但通过自动化,它应该足够快,您可以负担得起独立的测试执行。
所以像这样:
Given a new tenant of automobile website
And a new account "admin" with the admin role
And a registered automobile "Ford 1"
When I the "admin" opens the automobile page
Then the automobile page contains a "Ford 1".
这是假设汽车网站是多租户的。如果没有,您可能必须为每个场景启动一个新的应用程序。