TestNG在失败后不会继续执行测试

时间:2016-08-11 15:08:39

标签: java automation testng

我有一个带有页面对象模型的测试自动化框架。 我的所有测试都位于同一个包中的不同类中。

在testng.xml中我有

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test">
    <test name="SmokeTest">
        <classes>
            <class name="name.test1"/>
            <class name="name.test2"/>
            <class name="name.test3"/>
        </classes>
    </test>
</suite>

问题是,如果第一次测试失败,在运行TestNG.xml之后,它将停止测试执行。但我想继续执行所有测试用例。

我在我的项目中使用Jenkins,如果其中一个测试失败,它会立即停止执行。

测试示例

public class LoginTestTest {
    public AndroidDriver<AndroidElement> driver;
    public AOWebClient aoWebClient;

    AOWebClient aoWeb;
    public LoginTestTest(AndroidDriver<AndroidElement> driver, AOWebClient aoWeb){
        this.driver = driver;
        this.aoWeb = aoWeb;
        PageFactory.initElements(new AppiumFieldDecorator(driver), this);
    }

    public LoginTestTest() {
    }

    SoftAssert softAssert = new SoftAssert();

    @BeforeClass
    public void setUp() throws Exception {

        driver = DesiredCapabilitiesSetup.startAppiumServer();
        aoWebClient = DesiredCapabilitiesSetup.getAOWeb();

        LogIn logIn = new LogIn(driver,aoWebClient);
        logIn.logIn();
    }

    @org.testng.annotations.Test
    public void goToSettings() throws InterruptedException {
        HeaderMenu header = new HeaderMenu(driver,aoWeb);
        HamburgerMenuList ham = new HamburgerMenuList(driver);

        header.clickHamburgerButton();
        header.clickHamburgerButton();

        header.editButtonClick();


        softAssert.assertAll();
    }   

    @AfterClass
    public void tearDown(ITestResult result) throws Exception {
            if (result.getStatus() == ITestResult.FAILURE) {
                TakeScreenshot screenshot = new TakeScreenshot();
                screenshot.TakeScreenshot("screenshots/");
            }
        LogOut logOut = new LogOut(driver,aoWeb);
        logOut.logOut();
    }
}

如果我的测试在@Test中失败,则永远不会继续@AfterClass方法。 我希望如果@Test失败,它将继续@AfterClass方法,并且此类继续执行来自testng.xml的其他类的测试。

3 个答案:

答案 0 :(得分:3)

xml中的套件标签应包含configfailurepolicy =&#34; continue&#34;。这告诉testng即使配置在一个类中失败,您仍然希望在该套件中运行其他类。请参阅&#34; configfailurepolicy&#34;在documentation

所以你的xml会变成:

{{1}}

答案 1 :(得分:1)

来自documentation

  

alwaysRun:对于after方法(afterSuite,afterClass,...):如果设置为   是的,即使有一个或多个配置方法也会运行   之前调用的方法失败或被跳过。

然后,只需将@AfterClass替换为@AfterClass(alwaysRun = true)

答案 2 :(得分:0)

在套件语法下的 testng.xml 文件中添加以下属性

<suite thread-count="25" name="Smoke" parallel="classes" skipfailedinvocationcounts="true">

为我工作,希望它也适用于你:)