确保测试在TestNG套件中出现故障时继续执行

时间:2017-01-12 09:53:59

标签: java selenium testng

我使用testng进行了一系列回归测试: -

<suite>
    <test>
        <classes>
            <class name="test1"/>
            <class name="test2"/>
            <class name="test3"/>
            <class name="test4"/>
            <class name="test5"/>
        </classes>
    </test>
</suite>

我在测试3中进行了闪烁测试。有时它会抛出NoSuchElementException(这些是selenium测试)。当遇到这样的异常时会出现问题,但是当断言失败时就会出现问题 - 在这种情况下,套件会继续。

有时,套件继续测试4,有时整个套件在发生故障时停止。

  • 为什么行为不一致?
  • 如果在给定的类中抛出这样的异常,我如何强制套件始终继续进行下一次测试?

示例测试类: -

public class ItineraryViewTest extends TestBase {

@BeforeClass
@Parameters({"login", "username", "password", "userReference"}) 
public void addAPackage(String login, String username, String password){

    if (Objects.equals(login, "true")) {
        loginPage().loginWith(username, password, userReference);
    }


@AfterMethod
public void closeItineraryView(){
    itineraryPage().closeItineraryView();
}

@Test(description = "Tests Itinerary view can be selected")
public void itineraryViewCanBeSelected() {
    itineraryPage().selectItineraryView();

    assertTrue("Itinerary view was not displayed",
            (itineraryPage().itineraryViewDisplayed()));
    }
}

基类:

public class TestBase 
@BeforeClass
@Parameters({"env", "browser", "login", "mode", "emulatorMode"})
public void initialiseTests(String env, String browser, String login, String mode, String emulatorMode) throws MalformedURLException {
    APPLICATION_LOGS.debug("Running @BeforeClass");
    EnvironmentConfiguration.populate(env);
    WebDriverConfigBean webDriverConfig = aWebDriverConfig()
            .withBrowser(browser)
            .withDeploymentEnvironment(env)
            .withSeleniumMode(mode);

   //new driver gets insantiated here in this openBrowser method
    driver = WebDriverManager.openBrowser(webDriverConfig, getClass()); 

 //unrelated code...

@AfterClass
public void afterClass() {
    APPLICATION_LOGS.debug("Running @AfterClass");
    driver.quit();
}

@AfterSuite()
public void afterSuite() {
    APPLICATION_LOGS.debug("Running @AfterSuite");
    extent.flush();
}

1 个答案:

答案 0 :(得分:0)

您使用的是什么版本的testng?旧版本(6.9.something)中存在导致此问题的错误。

我建议验证您使用的是最新版本。

好吧,没有任何东西从你的代码或堆栈跟踪中跳出来...所以它可能有多种原因。我唯一的建议是将测试步骤设置为始终运行....就像这样:

@Test(alwaysRun = true)