如果20%或1st 20个测试用例测试方法失败,如何停止硒自动化?

问题描述 投票:0回答:1

我有100个测试用例,如果20%或前20个测试用例都失败了,如何停止执行?已经有了testng ITestResult,该在哪里中断构建?

@Test(retryAnalyzer = ReTryFail.class, dataProvider = "SanityTCTest", dataProviderClass = utility.Xlsdataprovider.class, groups = "Dashboard", alwaysRun = true)
public void Sanity_TC001(LinkedHashMap<String, String> data) throws InterruptedException, SQLException {

 Some code 
}

@Test(retryAnalyzer = ReTryFail.class, dataProvider = "SanityTCTest", dataProviderClass = utility.Xlsdataprovider.class, groups = "Dashboard", alwaysRun = true)
public void Sanity_TC002(LinkedHashMap<String, String> data) throws InterruptedException, SQLException {

 Some code 
}

@Test(retryAnalyzer = ReTryFail.class, dataProvider = "SanityTCTest", dataProviderClass = utility.Xlsdataprovider.class, groups = "Dashboard", alwaysRun = true)
public void Sanity_TC003(LinkedHashMap<String, String> data) throws InterruptedException, SQLException {

 Some code 
}
///////////////////////////////

如果结果“失败超过20,我在哪里可以打破此套件?我需要创建新的课程吗?还是可以在下面添加相同的课程?

@AfterMethod(alwaysRun = true)
public void reporterDataResults(ITestResult Result) throws InterruptedException {
    boolean flag = false;
    Testfail = TestResultStatus.Testfail;

    /*System.out.println("test fail flag in AfterMethod: " + Testfail); */
    if (Result.getStatus() == ITestResult.SKIP) {
        Resmark.put(Result.getName(), "");
        captureScreenShot(Result, "SKIP", getDriver());
        Reporter.log(Result.getName() + " is SKIPPED");
        Add_Log.info(Result.getName() + " is SKIPPED");
        TestResultTL.put(Result.getName(), "SKIP");
        if (!(getDriver() == null)) {
            closeWebBrowser();
        }
    } else if (Result.getStatus() == ITestResult.FAILURE) {

        Collection<String> values = TestResultStatus.mpaskeysnew.get(Result.getName());
        String resultout = String.join(" | ", values);
        System.out.println(resultout);
        Resmark.put(Result.getName(), resultout);

        captureScreenShot(Result, "FAIL", getDriver());
        Reporter.log(Result.getName() + " is FAIL");
        Add_Log.info(Result.getName() + " is FAIL");
        if (!(getDriver() == null)) {
            closeWebBrowser();
        }
        TestResultTL.put(Result.getName(), "FAIL");


    } else {
        captureScreenShot(Result, "PASS", getDriver());
        Resmark.put(Result.getName(), "");
        Reporter.log(Result.getName() + " is PASS");
        Add_Log.info(Result.getName() + " is PASS");
        if (!(getDriver() == null)) {
            closeWebBrowser();
        }
        TestResultTL.put(Result.getName(), "PASS");

    }
    Testskip = false;
    TestResultStatus.Testfail = false;

}
java selenium selenium-webdriver testng
1个回答
0
投票

您可以实现ISuiteListener,并在ISuiteListener方法中可以访问onFinishISuite

那么你可以做

ISuiteResult

ISuiteResult将为您提供该套件的失败测试次数。知道该数字后,您可以使用public void onFinish(ISuite suite) { final Map<java.lang.String,ISuiteResult> res = suite.getResults(); for (ISuiteResult r : res.values()) { context = r.getTestContext() ; failedTestCases =context.getFailedTests().size(); } }

中的策略实施停止执行

[如果您的测试用例位于不同的套件中,则在每次调用size()方法时,您可以基于停止执行来计算每个套件中失败的测试用例的数量。

另一种替代方法是实现this。在onFinish方法中,您可以访问ITestListener

您可以计算ITestListener方法的调用次数,并基于该停止执行次数。我认为在您的情况下实现onTestFailure更合适和更容易。

这里,我编辑以解释您如何实现侦听器

ITestResult

您可以阅读有关testng侦听器ITestResult的更多信息。

对于上面的编辑(如果您想那样做的话)。虽然我仍然认为您应该实现侦听器,但它更干净。仅在测试失败时才调用它。

但是与我在onTestFailure方法中所做的相同,添加一个计数器并在ITestListener中增加它。

import org.testng.ISuiteListener;

public class listener implements Itestlistener {
            public int i = 0;

             public void onTestFailure(ITestResult result) {

                     result.getName();
                     i++;
                     //your break logic goes here
                       if (i ==20){
                              // do something or call some function to stop execution
                             }
         }

     }

然后使用您的方法

here
© www.soinside.com 2019 - 2024. All rights reserved.