Session 在一个浏览器会话中进行多个JUnit测试

Session 在一个浏览器会话中进行多个JUnit测试,session,junit,webdriver,Session,Junit,Webdriver,我已经用SeleniumWebDriver编写了一个程序,但对于我的下一个项目,我希望通过使用更好的编程技术使其更易于维护。我想重点关注的主要部分是启动浏览器一次(1个会话),然后运行10个不同的测试,然后关闭浏览器,但我不确定如何执行此操作。使用JUnit这是我目前规划项目的方式: package example1; public class TestBase { //main class @Before public void setup () { //launch browser }

我已经用SeleniumWebDriver编写了一个程序,但对于我的下一个项目,我希望通过使用更好的编程技术使其更易于维护。我想重点关注的主要部分是启动浏览器一次(1个会话),然后运行10个不同的测试,然后关闭浏览器,但我不确定如何执行此操作。使用JUnit这是我目前规划项目的方式:

package example1;
public class TestBase { //main class

@Before
public void setup () {
//launch browser
}

@Test //all test run here
public void test1(){
login();
homepage();
}

@After
public void teardown(){
//close browser
}
}

package example1;
public class login(){
//do some action
}

package example1;
public class homepage(){
//do some action
}

package example1;
public class storeMethods(){
//all methods are stored which are then called by different classes
}

我不确定@Test注释是否应该在主类中,或者它是否应该在自己的类(login(),homepage())中,因为我在某个地方读到测试不应该相互依赖。我在java方面没有太多经验,但我非常愿意学习。我只需要一些关于最佳实践和如何编写良好的可维护测试的指导,因此如果有人能帮我或为我指出正确的方向,我将非常感激。

我建议重用浏览器并不是遵循更好的自动化编程实践

重用浏览器将导致不稳定和不可靠的测试,以及测试之间的依赖关系

在我看来,进行原子独立测试要好得多


如果测试运行时是一个问题,那么看看并行性和使用selenium网格虽然Robbie Wareham说的是正确的,但重用浏览器不是一个好主意,您说您的总体目标是可维护性

我发现提高可维护性的技术是页面对象模式,它有单独的功能与之交互

页面对象模式将选择器与代码的其余部分分开。这样,如果页面上的某个元素发生了更改,并且您的测试使用了该元素5次……您只需在1个位置更改代码。包含isLoaded()也是标准的,这是一个函数,可用于标识您是否已在所需页面上,以便不重新加载页面


我还建议您的测试不要直接处理您创建的页面。如果你有一个工具栏,你必须使用它进入X页面…然后工具栏改变了,你想要的链接在一个子菜单中,那么每次你在测试中使用这个链接,你都必须改变方法来点击这个链接。创建与页面交互的selenium命令集将使您的测试更高级,更易于阅读。

第一件事是@Test annotation通常用于创建单个测试用例。但是可以在一个java文件中有多个@Test注释。如果是这种情况,那么您可以在@Before和@After实现这一点。如果您有多个带有@Test annotation的java文件,则可以使用@BeforeClass和@AfterClassBeforeclass将在任何其他测试类之前执行,@AfterClass将在所有测试类执行之后执行。在@BeforeClass中打开浏览器,在@AfterClass中关闭浏览器。如果浏览器在两者之间崩溃,您也必须处理这种情况。