我的情况如下:
我有几个测试用例:
用户登录网站;
用户打开主页;
用户看到一些信息,并不是那么重要,也许是一些表或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
...)。对于单独的页面,我做了单独的测试类(LoginPageTest
,HomePageTest
,HelpDeskPageTest
)。所有测试类别彼此独立。结果,我花了很多时间在方法@BeforeClass
上,其中WebDriver
实例化(> 10sec。)。好长!我如何避免这种时间延迟?如何在所有睾丸内共享实例?JUnit如何帮助我解决问题?
最佳答案
确保您需要某种参数化。哪一个取决于您到底需要什么。如果要使用相同的参数集运行测试类中的所有方法,则需要@Parameters
。那么您可以提出自己的论据,例如"admin", "adminPassword"
,每种方法都将使用可访问的参数运行。
但是,如果您需要每个方法具有不同的参数集,则:
如果您在编译时知道所有参数,请检查zohhak。如果要从文件或其他提供程序获取参数,请检查junitParams