如果在testng中50%的测试方法失败,如何停止自动化?

时间:2018-05-14 07:28:15

标签: java testing testng

如果编写的@Test方法失败超过50%,我想停止执行。

E.g:

public void LoginTest(){

    @Test
    public void ValidUserName(){

    }

    @Test
    public void InValidUserName(){
    }

    @Test
    public void ValidUserID(){
    }

    @Test
    public void ValidUserIDInvalidPassword(){
    }

    @Test
    public void EmptyUserNamePassword(){
    }
}

如果ValidUserName()InValidUserName()ValidUserID()失败,则表示LoginTest 50%@Test方法失败,现在,我不想执行ValidUserIDInvalidPassword()和{{ 1}}

如果有人能帮助我,那就太好了。

2 个答案:

答案 0 :(得分:3)

实现IInvokedMethodListener接口,并在达到阈值时抛出SkipException。在下面的代码中使用了30%。

public class MyMethodInvoke implements IInvokedMethodListener {

    private int failure = 0;

    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
        int testCount = testResult.getTestContext().getAllTestMethods().length; 
        if((failure * 1.0) / testCount > 0.3)
            throw new SkipException("Crossed the failure rate");
    }

    @Override
    public void afterInvocation(IInvokedMethod method, ITestResult testResult) {        
        if(testResult.getStatus()==ITestResult.FAILURE)
            failure++;
    }

}
@Listeners({package.MyMethodInvoke.class})
public class Test {

它适用于单个类中的测试,不知道它如何在套件中的多个类中进行测试。甚至是并行执行。

答案 1 :(得分:1)

你想要什么是没有意义的。 尝试使用依赖项重构方法。 testNG页面的示例:

time

请参阅:http://testng.org/doc/documentation-main.html#dependent-methods

<强>更新

@Test public void serverStartedOk() {} @Test(dependsOnMethods = { "serverStartedOk" }) public void method1() {} 的概念,但它通常用于每个方法并与successPercentage结合使用。例如,在异步调用中,无法保证100%调用成功。所以,人们可以这样做:

invocationCount

但这与你想要的不相符。

更新2: &#34;你想要什么是没有意义的。&#34; - &GT;阅读:&#34; TestNG&#34;不支持开箱即用。但是有一些解决方法。请参阅http://testng.1065351.n5.nabble.com/how-to-stop-a-test-suite-if-one-method-fails-td13441.html

中的好答案