如何在不使用 testng 中的侦听器的情况下重新 运行 套件

How to re run suite without using listener in testng

如果套件中的任何测试用例失败,我需要重新运行 TestNG 测试方法本身的完整套件。有什么方法可以在测试方法中使用 XML 文件或测试 class 调用完整套件?完整的套件应该重新运行 after-class 方法或拆卸测试用例或最后一个测试用例

@AfterClass@AfterMethod 我无法使用,因为我正在处理它的一些其他功能。如果上述任何测试方法失败,我需要检查最后一个测试方法,然后我应该重新 运行 完整套件或 class.

或者请建议是否有跟踪哪个测试失败的侦听器,假设我有大约 10 种测试方法,其中 3 和 7 是主要测试,如果它们失败了我不得不重新 运行 完整套件应该在测试方法结束时检查(在测试方法 10 中,我们可以按照示例说。)

您可以使用 AfterSuite 方法重新运行套件。

在包含 AfterSuite 方法的测试 class 中,声明两个静态 int 变量以保持重新运行次数和允许的最大重新运行次数。 然后在 AfterSuite 方法中检查此计数并在未达到最大值时重新运行套件。

public class AnyTestClass {
    private static int counter;
    private static final int MAX_RERUN = 4;
    
    // replace "" with location of your suite xml -> something like src/test/......
    private static final String SUITE_LOC = "";

    // test methods.....

    @AfterSuite
    public void afterSuite(ITestContext ctx) {
        if(counter == MAX_RERUN) {
            return;
        }
      
        if(ctx.getFailedTests().size() > 0) {            
            counter++;

            // you could also have this list as static final in the class.
            List<String> suiteFiles = new ArrayList<>();
            suiteFiles.add(SUITE_LOC);
    
            TestNG runner = new TestNG();
            runner.setTestSuites(suiteFiles);
            runner.run();
        }
    }
}