我应该如何根据最佳实践来组织项目中的文件?

问题描述 投票:0回答:1

我是自动化新手,在使用 Selenium 进行一些实践后,我想深入构建一个完整的自动化框架设置:Selenium、Cucumber、Jenkins,也许稍后还可以集成一个报告工具。

在最初的日子里,我应用页面对象模型来构建我的项目。

最终,我积累了大量的测试用例Java文件。在探索 Cucumber 后,我转而创建步骤定义文件和功能文件。我的问题是:测试用例文件是否会被步骤定义替换,我应该运行步骤定义文件吗?

谢谢您,希望您度过美好的一天!

我不确定这里的最佳实践是什么

java selenium-webdriver cucumber
1个回答
0
投票

如果简单地回答您的问题:是的,您的测试用例文件将被替换。但不适用于步骤定义。它们将被替换为 .feature 文件。

使用 BDD 时,所有测试都表示为用 Gherkin 编写的人类可读的 .feature 文件。 Cucumber 以及其他 BDD 框架将“步骤”从 .feature 文件转换为方法(步骤定义或步骤实现)。

步骤定义 - 它实际上是执行所描述操作的代码(运行一些 SQL 查询、在 UI 上导航、进行 API 调用等)。它封装了执行给定/何时/然后步骤描述的操作所需的所有“复杂”/“技术”逻辑。在这里,您可以使用您提到的 POM,等等。

要执行 .feature 文件,您应该有一个测试运行程序。您可以使用例如用于此目的的 JUnit 或 TestNG 框架。

所以把它们放在一起:

编写功能文件 -> 编写步骤代码 -> 配置测试 使用步骤定义映射功能的运行器 -> 运行测试运行器 执行功能文件。

并且,为了更清楚起见,让我们看一个简短的示例。

假设您有一个登录测试,如下所示:

@Test
public void testLogin() {
    LoginPage loginPage = new LoginPage(driver)
    loginPage.setUsername("user123");
    loginPage.setPassword("password123");
    loginPage.clickLogin();
    Assert.assertTrue(driver.getCurrentUrl().contains("/home"));
}

您应该将其翻译为功能文件,例如:

Feature: User Login

  Scenario: Successful login
    Given User is on the login page
    When User enters username "user123" and password "password123"
    And User clicks on login button
    Then User should be redirected to the home page

然后实施4个步骤:

    @Given("^User is on the login page$")
    public void userIsOnTheLoginPage() {
        driver.get("http://yourdomain.com/login");
    }

    @When("^User enters username \"([^\"]*)\" and password \"([^\"]*)\"$")
    public void userEntersUsernameAndPassword(String username, String pass) {
        loginPage.setUsername(username);
        loginPage.setPassword(pass);
    }

    @And("^User clicks on login button$")
    public void userClicksOnLoginButton() {
        loginPage.clickLogin();
    }

    @Then("^User should be redirected to the home page$")
    public void userShouldBeRedirectedToHomePage() {
        Assert.assertTrue(driver.getCurrentUrl().contains("/home"));
    }

并创建一个测试运行器,让我们使用 TestNG:

@CucumberOptions(
    features = "src/test/resources/features",
    glue = {"stepdefs"}
)
public class TestRunner extends AbstractTestNGCucumberTests {
   
}

src/test/resources/features - 它是包含 .feature 文件的文件夹的路径
stepdefs - 它是包含步骤定义类的包的路径(src/test/java/stepdefs)

此后,您可以直接运行 TestRunner 类,或通过 TestNG .XML 文件来执行您的 .feature 文件。但请记住,您需要首先设置网络驱动程序(我希望您已经知道如何执行此操作)并将其提供给步骤定义类。通常,测试钩子状态(以DI的形式)用于此目的。

© www.soinside.com 2019 - 2024. All rights reserved.