我正在使用Selenium WebDriver
和TestNG
框架在Windows和MAC平台上运行不同浏览器上的测试套件 - Chrome,IE,Firefox和Safari。我的测试套件中有大约300个测试用例。
问题是在我认为驱动程序无响应的地方之间会跳过一些测试用例。但是,日志无法捕获测试用例被跳过的任何详细信息。
reporter class
扩展了TestListenerAdapter
,因此跳过的测试用例使用onConfigurationSkip
方法列在日志文件中。它仅打印已跳过特定测试用例。
以下是一些代码片段供参考
@Override
public void onConfigurationSkip(ITestResult testResult) {
LOGGER.info(String.format("Skipped Configuration for : %s", testResult.getMethod().getMethodName()));
}
public class TestClass {
private WebDriver driver;
@Parameters({ "platform", "browser"})
@BeforeClass
public void setUp(String platform, String browser) {
// Creates a new driver instance based on platform and browser details
driver = WebDriverFactory.getDriver(platform, browser);
// Login to web application
Utils.login(driver, username, password);
}
@Test
public void sampleTestMethod() {
// scripts for validating Web elements
}
@AfterClass
public void tearDown() {
driver.quit();;
}
}
观察:
driver.quit()
不保证驱动程序实例已关闭,因为我仍然可以在任务管理器中看到驱动程序实例正在运行。这又是间歇性的,有时只会发生。driver
方法中创建新的@BeforeClass
实例,并在@AfterClass
中关闭有什么建议?提前致谢
使用TestNG跳过Selenium测试用例的最常见原因是,如果您的方法依赖于其他方法,并且您依赖的方法失败。
要获得有关跳过测试原因的信息,您可以在测试后的方法中实现,如下所示: -
@AfterMethod
public void afterTest(ItestResult result) {
Throwable t = result.getThrowable();
// with the object of t you can get the stacktrace and log it into your reporter
}
为避免测试被跳过,您可以在@Test注释后将alwaysRun参数设置为true
@Test(alwaysRun=true)
要避免webdriver被重新启动,请使用@BeforeMethod和@AfterMethod注释对方法进行驱动程序清理,因此请尝试将setUp和tearDown方法的注释分别更改为@BeforeMethod和@AfterMethod
如果您在每次测试中打开和关闭浏览器都没问题,那么您应该使用@BeforeMethod或@AfterMethod而不是@BeforeClass和@AfterClass
如果您遵循以下代码及其输出,那么您会发现@BeforeMethod在每个测试注释方法之前执行,但@BeforeClass只对类中的所有方法执行一次。
由于我没有完整的代码进行分析,因此我可以假设您的测试试图重用错误的驱动程序实例。因此,最好的办法是在每次测试执行完成后关闭它。
码:
包com.autmatika.testng;
import org.testng.annotations。*;
公共类发现{
@BeforeClass
public void beforeClass(){
System.out.println("Before Class");
}
@AfterClass
public void afterClass(){
System.out.println("After Class");
}
@BeforeMethod
public void beforeTest(){
System.out.println("Before Test");
}
@AfterMethod
public void afterTest(){
System.out.println("After Test");
}
@Test
public void test1(){
System.out.println("test 1");
}
@Test
public void test2(){
System.out.println("test 2");
}
@Test
public void test3(){
System.out.println("test 3");
}
@Test
public void test4(){
System.out.println("test 4");
}
}
输出:
Before Class
Before Test
test 1
After Test
Before Test
test 2
After Test
Before Test
test 3
After Test
Before Test
test 4
After Test
After Class
===============================================
Default Suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================