猿问

如何调用 JUnit 测试作为另一个测试的设置?

我正在尝试创建一个 JUnit 测试,要求用户使用管理员帐户登录。为了使我不必重复代码,我完成了LoginJUnit 测试和GoToAdminPageJUnit 测试。

  • 首先访问登录页面并登录。

  • 第二个尝试访问只有管理员才能访问的菜单,旨在从第一个离开的地方继续。我想要的是GoToAdminPage从相同的页面开始并以相同的环境Login结束。

这个想法是,通过创建Login自动化测试,我可以将其重复用于我将来想做的任何需要管理员权限的测试。

我想做的是,在 中setUp()调用GoToAdminPage第一个测试。然而,它的作用是,它启动一个测试浏览器GoToAdminPage,然后立即启动另一个测试浏览器,该浏览器由于包含指令Login而关闭。Login.tearDown()driver.quit()

我想要的是GoToAdminPage期望在同一页面结束时正确拾取Login,它没有get说明,因此它永远不会离开起始的 Firefox 页面。

我已经尝试过一些事情。我的每个测试都继承该类BasicTest,该类定义了许多内容(WebDriver、JS Executor、通用实用函数等)。在该课程中,我创建了一个perform()调用setUp()和的函数test()

这样,在 中GoToAdminPage,我所要做的就是调用Login.perform()GoToAdminPage.setUp()这将在技术上实现我想做的事情。然而,事实并非如此,并且具有与我上面提到的相同的效果。

在网上查看,我发现我也可以做到这一点GoToAdminPage extends Login,但也有相同的结果。

最后,我尝试将整个Login.test()过程放在类中的一个单独的函数中Login,我可以在 inside 调用该函数GoToAdminPage,但这具有相同的结果。

总而言之,似乎发生的情况是,当我在内部调用另一个 JUnit 测试时GoToLoginPage,它会执行测试,但将其作为单独的测试进行。

我想要的是能够本质上使这一切成为一个大测试,一旦我调用了Login,我就可以在我的用户登录的情况下与登录后页面进行交互。本质上我只是想GoToAdminPage成为 的Login扩展过程。

这可能吗?


蝴蝶不菲
浏览 139回答 3
3回答

阿波罗的战车

将“登录”步骤定义为常规方法(未用 注释@Test)。然后您可以从任何您想要的地方调用该方法。来自您的登录测试方法(在执行步骤后添加所需的断言)以及来自任何setUp没有实际运行登录测试的方法。

qq_遁去的一_1

最后我找到了解决方案:GoToAdminPage延伸LoginGoToAdminPage.setUp()来电parent.setUp()GoToAdminPage.test()来电parent.test()使用它,我能够使我的第二个测试使用其父级作为设置阶段。

元芳怎么了

您应该应用页面对象模式,并创建一个登录对象页面。Web 自动化中最流行的模式之一是所谓的页面对象模式。要理解该模式的主要目标,首先您需要考虑您的 Web 自动化测试正在做什么。他们导航到不同的网页并在各种元素上单击/键入。页面对象模式将页面上发生的所有元素、操作和验证包装在一个对象中——页面对象。页面对象模式的一些优点如下所示,减少代码的重复使测试更具可读性和健壮性提高测试的可维护性恕我直言,在测试用例之间创建依赖关系并不是一个好的做法。例子:import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.FindBy;import org.openqa.selenium.support.PageFactory;public final class LoginPage {    @FindBy(id="username")    private WebElement username;    @FindBy(id="password")    private WebElement password;    @FindBy(id="loginBtn")    private WebElement submit;    public LoginPage(WebDriver driver) {        PageFactory.initElements(driver, this);    }    public void submit(String username, String password) {        this.username.sendKeys(username);        this.password.sendKeys(password);        submit.click();    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答