我的情况如下:

我有几个测试用例:


用户登录网站;
用户打开主页;
用户看到一些信息,并不是那么重要,也许是一些表或div等。
用户进入HelpDesk页面。
用户转到CustomPage。
用户在页面上看到一些自定义信息。
以及越来越多的其他情况。


我的任务是通过Selenium Driver和JUnit在不同的用户(admin1,admin2,userWithoutAccess等)下测试所有这些情况。

但是,目前,我没有找到有效的解决方案:(

例如:

public class HelpDeskPageTest
{
    private static WebDriver driver;

    HelpDeskPage helpDeskPage;

    @BeforeClass
    public static void setUpClass()
    {
        driver = new FirefoxDriver();
        Utils.logon(driver, "admin", "1234");
    }

    @AfterClass
    public static void tearDownClass()
    {
      driver.quit();
    }

    @Before
    public void setUp()
    {
        helpDeskPage = HelpDeskPage.open(driver);
    }

    @Test
    public void helpDeskPageIsOpen()
    {
        assertTrue(channelBrowserPage.getTitle().equals("Google: Internal HelpDesk"));
    }
}


该代码的作用是什么?
此代码仅测试用户管理员是否可以打开HelpDesk页面。
另外,HelpDeskPageTest类可以包含其他测试方法的一个,这些方法用于测试HelpDesk页面上的管理员操作。没事的

您可以问我:那么,您在哪里看到问题的呢?我的回答如下:


如果要为其他用户测试相同的功能(例如:admin2)。我该怎么做?我必须创建名称相同的测试类:HelpDeskPageTestForAdmin2,修改@BeforeClass方法(以admin2登录),然后从HelpDeskPageTest复制所有其他代码?但这直接违反了DRY原理!
如何避免这种情况?
网站包含许多不同的页面(Login, Home, HelpDesk, CustomPage1, CustomPage2 ...)。对于单独的页面,我做了单独的测试类(LoginPageTestHomePageTestHelpDeskPageTest)。所有测试类别彼此独立。结果,我花了很多时间在方法@BeforeClass上,其中WebDriver实例化(> 10sec。)。好长!我如何避免这种时间延迟?如何在所有睾丸内共享实例?


JUnit如何帮助我解决问题?

最佳答案

确保您需要某种参数化。哪一个取决于您到底需要什么。如果要使用相同的参数集运行测试类中的所有方法,则需要@Parameters。那么您可以提出自己的论据,例如"admin", "adminPassword",每种方法都将使用可访问的参数运行。

但是,如果您需要每个方法具有不同的参数集,则:
如果您在编译时知道所有参数,请检查zohhak。如果要从文件或其他提供程序获取参数,请检查junitParams

10-08 11:50