Testing TestNG-套件完成后,如何重新运行失败的测试
在TestNG中完成套件后,如何重新运行失败的测试。 使用RetryAnalyzer,我可以在失败的测试用例之后立即重新运行失败的测试用例,但不能在套件完成之后 我要求这样做的原因是: 我的测试用例在20多个线程上并行运行,我的一些测试系统在这个负载上表现不好,因此在负载之后立即重试并没有多大帮助Testing TestNG-套件完成后,如何重新运行失败的测试,testing,automated-tests,testng,Testing,Automated Tests,Testng,在TestNG中完成套件后,如何重新运行失败的测试。 使用RetryAnalyzer,我可以在失败的测试用例之后立即重新运行失败的测试用例,但不能在套件完成之后 我要求这样做的原因是: 我的测试用例在20多个线程上并行运行,我的一些测试系统在这个负载上表现不好,因此在负载之后立即重试并没有多大帮助 但是我们通过重新运行testNG-failed.xml来重试失败的测试用例,这些用例被传递。目前,我们正在重新运行testNG-failed.xml,但它为我们创建了2个报告和许多其他问题。我们可以通
但是我们通过重新运行testNG-failed.xml来重试失败的测试用例,这些用例被传递。目前,我们正在重新运行testNG-failed.xml,但它为我们创建了2个报告和许多其他问题。我们可以通过RetryAnalyzer或testNG中的任何其他方式在不重新运行testNG-failed.xml的情况下实现类似的功能吗 您可以创建
suiteListener
,在测试套件运行后显示失败的测试用例,如下所示,以获取所有上下文的所有失败测试用例
public class suiteListener implements ISuiteListener {
@Override
public void onStart(ISuite suite) {
}
@Override
public void onFinish(ISuite suite) {
System.out.println("suite finished");
final Map<java.lang.String,ISuiteResult> res = suite.getResults()
for (ISuiteResult r : res.values()) {
context = r.getTestContext() ;
Iterator<ITestResult> failedTestCases =context.getFailedTests().getAllResults().iterator();
while (failedTestCases.hasNext()) {
System.out.println("failedTestCases...");
ITestResult failedTestCase = failedTestCases.next();
ITestNGMethod method = failedTestCase.getMethod();
java.lang.String testName = failedTestCase.getName();
System.out.println("failed method.."+ method);
System.out.println("failed testName.."+ testName);
}
}
然后,您可以通过创建一个虚拟类,简单地利用方法以编程方式运行测试
像这样修改套件,并在testng.xml
import org.testng.IAlterSuiteListener;
import org.testng.xml.XmlPackage;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import java.util.Collections;
import java.util.List;
public class SimpleSuiteAlterer implements IAlterSuiteListener {
@Override
public void alter(List suites) {
XmlSuite suite = suites.get(0);
XmlTest xmlTest = new XmlTest(suite);
xmlTest.setName("test123");
XmlClass xmlClass = new XmlClass("yourClass");
List<XmlInclude> includeMethods = new ArrayList<>();
includeMethods.add(new XmlInclude("your_method1"));
includeMethods.add(new XmlInclude("your_method2"));
//add more methods dynamically from your other listener
xmlClass.setIncludeMethods(includeMethods);
xmlTest.setXmlClasses(classes) ;
}
}
import org.testng.IAlterSuiteListener;
导入org.testng.xml.XmlPackage;
导入org.testng.xml.XmlSuite;
导入org.testng.xml.XmlTest;
导入java.util.Collections;
导入java.util.List;
公共类SimpleSuite实现了IAlterSuiteListener{
@凌驾
公共无效更改(列表套件){
XmlSuite=suites.get(0);
XmlTest XmlTest=新的XmlTest(套件);
setName(“test123”);
XmlClass XmlClass=新的XmlClass(“您的类”);
List includeMethods=new ArrayList();
includeMethods.add(新的xmlclude(“您的方法1”);
includeMethods.add(新的xmlclude(“您的方法2”);
//从其他侦听器动态添加更多方法
setIncludeMethods(includeMethods);
setXmlClasses(类);
}
}
我认为运行此测试套件将运行一个单独的套件,我将得到另一份报告。或者它将更新现有的测试套件和测试用例结果?@Nikunj Aggarwal我在上面编辑过回答您的问题。请别忘了标记答案和upvoteok让我分析一下你的方法,然后再投票并接受答案。谢谢你的邀请help@NikunjAggarwal我有同样的问题。在哪里可以使用RetryAnalyzer解析?
import org.testng.IAlterSuiteListener;
import org.testng.xml.XmlPackage;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import java.util.Collections;
import java.util.List;
public class SimpleSuiteAlterer implements IAlterSuiteListener {
@Override
public void alter(List suites) {
XmlSuite suite = suites.get(0);
XmlTest xmlTest = new XmlTest(suite);
xmlTest.setName("test123");
XmlClass xmlClass = new XmlClass("yourClass");
List<XmlInclude> includeMethods = new ArrayList<>();
includeMethods.add(new XmlInclude("your_method1"));
includeMethods.add(new XmlInclude("your_method2"));
//add more methods dynamically from your other listener
xmlClass.setIncludeMethods(includeMethods);
xmlTest.setXmlClasses(classes) ;
}
}