当前位置: 首页 > 知识库问答 >
问题:

如何在Jenkins上自动重新运行失败的TestNG测试

周祺
2023-03-14

我正在为企业环境构建Selenium自动化套件的最后阶段工作。它配置了TestNG,在Jenkins上运行。该套件主要由UI测试组成。作为这种设置的典型,测试是不稳定的,在我们的时间范围内,重新处理测试以减少对UI自动化的依赖是不可行的。

鉴于我已经在进行代码优化,我想设置一些自动重新运行失败测试的东西,以最大限度地减少手动调查失败的需要。我已经调查了几个选项,但没有一个适合我们的设置:

  • 一个理想的解决方案是使用Maven Surefire插件,它有一个reRunningTestScont属性,但这个功能只支持JUnit(我们使用TestNG)

如能为我们的设置提供解决方案,我们将不胜感激。

共有3个答案

高兴贤
2023-03-14

注意:此响应替换被主持人删除的先前响应。有关如何定义和连接TestNG重试分析器的详细信息,请参阅下一个响应。我更喜欢我的回答遵循那个,但它却出现在这里。

除了下面显示的TestNG套件文件方法外,还可以通过服务加载程序配置文件指定重试分析器。http://testng.org/doc/documentation-main.html#listeners-服务加载器

这种ServiceLoader机制的优点是,无论项目如何定义或如何运行,都能按预期工作。

赫连冠玉
2023-03-14

对于失败的testNG测试,失败报告存储为TestNgfailed。xml。将其添加到您的XML套件中,类似这样的功能应该可以工作:

<suiteXmlFiles>
  <suiteXmlFile>src/test/<your path>.../testng.xml</suiteXmlFile>
  <suiteXmlFile>target/surefire-reports/testngfailed.xml</suiteXmlFile>
</suiteXmlFiles>

这可能会有帮助:通过詹金斯testngfailed.xml

壤驷敏学
2023-03-14

您可以添加重试监听器:

重试类:

import org.testng.IRetryAnalyzer;

import org.testng.ITestResult;


public class Retry implements IRetryAnalyzer {

    private int retryCount = 0;

    private int maxRetryCount = 1;


    public String getResultStatusName(int status) {

        String resultName = null;

        if (status == 1)

            resultName = "SUCCESS";

        if (status == 2)

            resultName = "FAILURE";

        if (status == 3)

            resultName = "SKIP";

        return resultName;

    }


    /*

     * Below method returns 'true' if the test method has to be retried else

     * 'false' and it takes the 'Result' as parameter of the test method that

     * just ran

     * 

     * @see org.testng.IRetryAnalyzer#retry(org.testng.ITestResult)

     */

    @Override

    public boolean retry(ITestResult result) {

        if (retryCount < maxRetryCount) {

            System.out.println("Retrying test " + result.getName() + " with status " + getResultStatusName(result.getStatus()) + " for the " + (retryCount + 1) + " time(s).");

            retryCount++;

            return true;

        }

        return false;

    }

并添加此监听器:

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;


import org.testng.IAnnotationTransformer;

import org.testng.IRetryAnalyzer;

import org.testng.annotations.ITestAnnotation;


public class RetryListener implements IAnnotationTransformer {


    @Override

    public void transform(ITestAnnotation testannotation, Class testClass, Constructor testConstructor, Method testMethod) {

        IRetryAnalyzer retry = testannotation.getRetryAnalyzer();


        if (retry == null) {

            testannotation.setRetryAnalyzer(Retry.class);

        }

    }


}

您有2个选项调用上述监听器:

从您的xml testng runner中,如下所示:

<listeners>

        <listener class-name="package path....com.listeners.RetryListener" />

        <listener class-name="org.uncommons.reportng.HTMLReporter" />

        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />

</listeners>

从测试类:

@Listeners({ package path....com.listeners.RetryListener })

您需要在类声明之前添加上述声明。

 类似资料:
  • 问题内容: 我正在尝试从Jenkins运行TestNG测试(在一个包含的Java项目中),但是没有运气。 似乎Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng- plugin )仅发布TestNG测试的结果,但实际上不运行测试类…或我错了吗? 无论如何,我如何在Jenkins的TestNG项目中实际运行TestN

  • 我试图从Jenkins那里运行TestNG测试(在一个包含Java的项目中),但没有成功。 看起来好像是Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng-plugin)只发布TestNG测试的结果,但不实际运行测试类。。。还是我错了? 在任何情况下,我如何在与Jenkins的TestNG项目中实际运行TestNG

  • 我在Jenkins的plugin,这个插件可以运行现场测试,但不能由调度器自动运行。这个提供了按钮,但我必须自己点击它。 问题:我可以对按钮或任何其他建议进行变通吗? 目标是:再次自动运行失败的测试。

  • 我正在jenkins上运行一组测试,我得到以下结果: 好的东西告诉我行: maven-surefire-插件: 2.16是这里的问题,所以这里是我的pom文件检查: 我已经检查了maven仓库中的插件,我看到的唯一区别是插件标签中有插件,而在网站中它是在依赖标签中。 这里可能有什么错误? 谢谢 注:抱歉纯文本,但我不知道如何给代码上色=/

  • 如果一段时间后出现故障,是否有办法自动重新运行作业(例如:当连接失败时,在10分钟后重试一次)?我搜索了互联网,但我确实找到了任何结构化的解决方案,我真的被这个问题困住了。 这在塔伦德是可以实现的吗?如果是,要使用的组件是什么,以什么顺序?提前谢谢你。

  • 问题内容: 我在带有TestNG的Java中使用Selenium webdriver,来运行X个测试用例。 我想要的是任何测试用例一旦失败就自动重新启动(从启动或从故障点开始)。 我知道TestNG框架具有以下方法 但是我不知道如何找出它是哪个测试用例,然后如何重新启动它。 问题答案: 我想查看其中包含实际代码的示例,并在此处找到它: 使用TestNg立即重新启动Test 观察一下,一旦发生故障,