在TestNG中首次失败后停止套件执行

时间:2011-04-15 23:22:36

标签: ant testng

我使用Ant执行一组TestNG测试,如下所示:

 <testng suitename="functional_test_suite" outputdir="${basedir}/target/"
classpathref="maven.test.classpath" dumpCommand="false" verbose="2"
haltonfailure="true" haltonskipped="false" parallel="methods" threadCount="2">
   <classfileset dir="${basedir}/target/test-classes/">
    <include name="**/*Test.class" />
   </classfileset>

我希望测试在第一次失败后立即停止。 haltonfailure似乎没有做到这一点,如果整个套件有测试失败,它就会停止ant构建。有没有什么办法可以在第一次失败时暂停套件执行?

由于

2 个答案:

答案 0 :(得分:0)

您可以设置各个测试方法的依赖关系。 testng dependencies。如果传递了所需的依赖项,这将只运行测试方法。

答案 1 :(得分:0)

您可以为此目的使用套件侦听器。

public class SuiteListener implements IInvokedMethodListener {
    private boolean hasFailures = false;

    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
        synchronized (this) {
            if (hasFailures) {
                throw new SkipException("Skipping this test");
            }
        }
    }

    @Override
    public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
        if (method.isTestMethod() && !testResult.isSuccess()) {
            synchronized (this) {
                hasFailures = true;
            }
        }
    }
}

@Listeners(SuiteListener.class)
public class MyTest {
    @Test
    public void test1() {
        Assert.assertEquals(1, 1);
    }

    @Test
    public void test2() {
        Assert.assertEquals(1, 2);  // Fail test
    }

    @Test
    public void test3() {
        // This test will be skipped
        Assert.assertEquals(1, 1);
    }
}