gpt4 book ai didi

java - 如果 20% 或第 20 个测试用例测试方法失败,我如何停止 Selenium 自动化?

转载 作者:行者123 更新时间:2023-12-01 16:30:49 26 4
gpt4 key购买 nike

我有 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
}
///////////////////////////////

如果结果“FAIL 超过 20 ?”,我可以在哪里中断此套件?我需要创建新类(class)还是可以在下面添加相同的类(class)?

@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;

}

最佳答案

您可以实现ISuiteListeneronFinish 方法中,您将可以访问 ISuiteISuiteResult

然后你就可以了

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 。在 onTestFailure 方法中,您可以访问 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
}
}

}

您可以阅读有关 testng 监听器的更多信息 here

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

但与我在 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
}

}

关于java - 如果 20% 或第 20 个测试用例测试方法失败,我如何停止 Selenium 自动化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62047096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com