Java 如果20%或前20个测试用例测试方法失败,如何停止selenium automation?

Java 如果20%或前20个测试用例测试方法失败,如何停止selenium automation?,java,selenium,selenium-webdriver,testng,Java,Selenium,Selenium Webdriver,Testng,我有100个测试用例,如果20%或前20个测试用例都失败了,我如何停止执行? 已经有testng ITestResult,我应该在哪里中断构建 @Test(retryAnalyzer = ReTryFail.class, dataProvider = "SanityTCTest", dataProviderClass = utility.Xlsdataprovider.class, groups = "Dashboard", alwaysRun = true) public void Sanit

我有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 
}
///////////////////////////////
@Test(retryAnalyzer=ReTryFail.class,dataProvider=“sanityctest”,dataProviderClass=utility.Xlsdataprovider.class,groups=“Dashboard”,alwaysRun=true)
public void Sanity_TC001(LinkedHashMap数据)抛出InterruptedException、SQLException{
一些代码
}
@测试(retryAnalyzer=ReTryFail.class,dataProvider=“SanityTest”,dataProviderClass=utility.Xlsdataprovider.class,groups=“Dashboard”,alwaysRun=true)
public void Sanity_TC002(LinkedHashMap数据)引发InterruptedException、SQLException{
一些代码
}
@测试(retryAnalyzer=ReTryFail.class,dataProvider=“SanityTest”,dataProviderClass=utility.Xlsdataprovider.class,groups=“Dashboard”,alwaysRun=true)
public void Sanity_TC003(LinkedHashMap数据)引发InterruptedException、SQLException{
一些代码
}
///////////////////////////////
如果结果“失败超过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;

}
@AfterMethod(alwaysRun=true)
public void reporterDataResults(ITestResult结果)引发InterruptedException{
布尔标志=假;
Testfail=TestResultStatus.Testfail;
/*System.out.println(“AfterMethod中的测试失败标志:+Testfail”)*/
if(Result.getStatus()==ITestResult.SKIP){
Resmark.put(Result.getName(),“”);
captureScreenShot(结果“跳过”,getDriver());
Reporter.log(跳过Result.getName()+);
添加_Log.info(跳过Result.getName()+);
TestResultTL.put(Result.getName(),“SKIP”);
如果(!(getDriver()==null)){
closeWebBrowser();
}
}else if(Result.getStatus()==ITestResult.FAILURE){
集合值=TestResultStatus.mpaskeysnew.get(Result.getName());
String resultout=String.join(“|”,值);
系统输出打印项次(resultout);
Resmark.put(Result.getName(),resultout);
captureScreenShot(结果“FAIL”,getDriver());
Reporter.log(Result.getName()+“is FAIL”);
添加_Log.info(Result.getName()+“is FAIL”);
如果(!(getDriver()==null)){
closeWebBrowser();
}
TestResultTL.put(Result.getName(),“FAIL”);
}否则{
captureScreenShot(结果“通过”,getDriver());
Resmark.put(Result.getName(),“”);
Reporter.log(Result.getName()+“is PASS”);
添加_Log.info(Result.getName()+“is PASS”);
如果(!(getDriver()==null)){
closeWebBrowser();
}
TestResultTL.put(Result.getName(),“PASS”);
}
Testskip=false;
TestResultStatus.Testfail=false;
}
您可以实现,并在
onFinish
方法中访问
ISuite

那你就可以了

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();
                 }
         }
您可以阅读更多关于testng侦听器的信息

对于上面的编辑(如果你想这样做的话)。尽管我仍然认为你应该实现listener,它更干净。只有在测试失败时才会调用它

但是,请执行与我在
onTestFailure
方法中所做的相同的操作,在
中添加一个计数器,并在
else if
中增加它

   public int i = 0;  //do this in your class
那么你的方法呢

 else if (Result.getStatus() == ITestResult.FAILURE) {
    i++;  //increase counter here
    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");
      if (i==20){
         // stop execution here
      }

  }
else if(Result.getStatus()==ITestResult.FAILURE){
i++;//增加这里的计数器
集合值=TestResultStatus.mpaskeysnew.get(Result.getName());
String resultout=String.join(“|”,值);
系统输出打印项次(resultout);
Resmark.put(Result.getName(),resultout);
captureScreenShot(结果“FAIL”,getDriver());
Reporter.log(Result.getName()+“is FAIL”);
添加_Log.info(Result.getName()+“is FAIL”);
如果(!(getDriver()==null)){
closeWebBrowser();
}
TestResultTL.put(Result.getName(),“FAIL”);
如果(i==20){
//停止在这里执行
}
}

我已经更新了在方法之后添加的问题,如果超过20,我应该在哪里中断?
 else if (Result.getStatus() == ITestResult.FAILURE) {
    i++;  //increase counter here
    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");
      if (i==20){
         // stop execution here
      }

  }