Java 硒+;朱尼特。有多干?
我的情况如下: 我有两个测试用例:Java 硒+;朱尼特。有多干?,java,unit-testing,selenium,junit,automated-tests,Java,Unit Testing,Selenium,Junit,Automated Tests,我的情况如下: 我有两个测试用例: 用户登录网站 用户打开主页 用户看到一些信息,不是很重要,可能是一些表格或div等 用户转到帮助台页面 用户转到自定义页面 用户可以在页面上看到一些自定义信息 还有越来越多的其他案件 我的任务是通过Selenium驱动程序和JUnit在不同用户(admin1、admin2、userWithoutAccess等)下测试所有这些情况 但是,目前,我没有看到任何有效的解决方案:( 例如: public class HelpDeskPageTest { p
- 用户登录网站李>
- 用户打开主页李>
- 用户看到一些信息,不是很重要,可能是一些表格或div等
- 用户转到帮助台页面
- 用户转到自定义页面
- 用户可以在页面上看到一些自定义信息
- 还有越来越多的其他案件
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"));
}
}
这个代码是做什么的?
这段代码只是测试用户管理员是否可以打开帮助台页面。
另外,HelpDeskPageTest
类可以包含一个lof其他测试方法,用于测试HelpDesk页面上的管理操作。一切正常
你可以问我:那么,你在哪里发现了这个问题?我的回答如下:
admin2
)。我怎么做?我必须创建名为:HelpDeskPageTestForAdmin2
的相同测试类,修改@BeforeClass
方法(以admin2
的身份登录)只需从HelpDeskPageTest
复制所有其他代码?但这直接违反了原则DRY!
我怎样才能避免这种情况Login,Home,HelpDesk,CustomPage1,CustomPage2
)。对于单独的页面,我创建了单独的测试类(LoginPageTest
,HomePageTest
,HelpDeskPageTest
)。所有测试类都是相互独立的。因此,我花了大量时间在方法@BeforeClass
中WebDriver
实例化(>10秒)。太长了!我如何避免这种时间延迟?如何在所有测试中共享实例JUnit如何帮助我解决问题?您可以通过在JUnit中以TestNg的形式动态传递不同的数据来重复测试 使用类可以实现这一点 例如,见下面的帖子
您在这里所做的不是单元测试,而只是将junit用作运行集成或系统测试的助手。这是很常见的,并不是做错事的迹象。但这确实意味着应用于junit单元测试的一般指导原则、功能和最佳实践应该被忽略 因此,忘记每个测试一个断言,以及像@Before这样的大多数注释。只需为每个测试用例编写一个方法,可能在代表主题或功能的同一个测试类中 因此: @试验 void testLoginAndOut() @测试testLoginAndOpenHelpDeskPage()
使用通用例程(例如,void loginAUser(字符串名称)像往常一样防止代码重复。当然,您需要某种参数化。哪种参数化取决于您需要什么。如果您希望使用相同的参数集运行测试类中的所有方法,那么您需要
@parameters
。然后您可以使用参数,例如“admin”、“adminPassword”
,每个方法都将在可访问这些参数的情况下运行
但是,如果您需要每个方法具有不同的参数集,则:
如果您在编译时知道所有参数,请选中。如果您想要从文件或其他提供程序获取参数,请选中。您可以使用JUnit的参数化测试来完成此操作,但需要使用JUnit 4.11或更高版本。您可以看到 使用Gradle,构建依赖项如下所示:
dependencies {
// stored at: %HOMEPATH%/.gradle/caches/artifacts-14/filestore
compile group: 'org.sikuli', name: 'sikuli-api', version: '1.0.+'
compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '2.+'
compile group: 'commons-collections', name: 'commons-collections', version: '3.+'
compile group: 'junit', name: 'junit', version: '4.+'
compile group: 'commons-lang', name: 'commons-lang', version: '2.+'
compile group: 'commons-io', name: 'commons-io', version: '2.+'
}
您需要使用不同的登录凭据运行所有@test吗?我希望我的回答能帮助您:)为什么不尝试QMetry自动化框架[]它为基于web的测试自动化提供了不同的设计概念。例如,页面使用层次结构,您只需要调用午餐页面,框架不仅负责启动该页面,还负责整个页面层次结构,以达到特定页面。您对“junitParams”的建议没有必要。JUnit 4.11+提供了参数化支持。这取决于您需要什么。JUnit的方式需要很多样板文件,并且不能为每个方法都有不同的参数。zohhak和/或junitParams让您编写更清晰的代码没有“样板文件”。事实并非如此。此外,每个测试类可以有一个参数化列表。如果需要多个参数化列表,请创建多个测试类。简单。