首页 > 解决方案 > 如果 50% 的测试方法在 testng 中失败,我该如何停止自动化?

问题描述

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

例如:

public void LoginTest(){

    @Test
    public void ValidUserName(){

    }

    @Test
    public void InValidUserName(){
    }

    @Test
    public void ValidUserID(){
    }

    @Test
    public void ValidUserIDInvalidPassword(){
    }

    @Test
    public void EmptyUserNamePassword(){
    }
}

If ValidUserName(), InValidUserName()and ValidUserID()get failed 这意味着 LoginTest 50% @Test 方法失败了,现在,我不想执行ValidUserIDInvalidPassword()EmptyUserNamePassword()

如果有人能在这方面帮助我,那就太好了。

标签: javatestingtestng

解决方案


实现接口并在达到阈值时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 {

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


推荐阅读