通知Jenkins Gradle运行任务中的TestNG测试失败,将构建标记为失败

时间:2018-02-12 10:33:33

标签: jenkins gradle testng jenkins-pipeline

由于我无法影响的原因,TestNG在项目上启动了以下机制。 总之,它创建了一个新的TestNG实例,添加了侦听器,指定了类并运行了测试。然后,所有这些脏代码都是从Gradle运行任务调用的(实际上是空的,据我所知,只需调用TestManager.main()方法)。

我删除了部分代码只是为了显示主要方向:

class TestManager {
    static void main(String[] args) {
        try {
            runTests(args[0])
        } catch (Exception e) {
            e.printStackTrace()
            System.in.read()
        }
    }

    private static void runTests(Application app) {

        TagsConfig.runs.each { run ->
            if (run.execute) {
                List<TagsSuite> suites = TagsConfig.suites
                suites.each { suite ->

                    if (suite.execute) {
                        Reflections reflections = new Reflections("${app.packageName}.${suite.name}")
                        def classes = reflections.getSubTypesOf(${suite.name})

                        if (classes.size() > 0) {
                            TestNG testNG = new TestNG()
                            testNG.testClasses = classes
                            testNG.groupByInstances = true
                            testNG.outputDirectory = "testng-output"
                            testNG.addListener(new TestListenerAdapter())
                            testNG.addListener(new ExceptionListener())
                            testNG.addListener(new AllureTestListener())
                            if (TagsConfig.isSmoke) {
                                testNG.setGroups("smoke")
                            } else if (TagsConfig.isExtendedSmoke) {
                                testNG.setGroups("extended_smoke")
                            }
                            testNG.run()
                        }
                    }
                }
            }
        }
    }

所以测试启动看起来像这样:

gradle clean
gradle run

我无法改变现在开始测试的方式,其中一个问题是即使有失败/损坏/跳过测试,Jenkins中的构建也总是成功的。

因此,我可以从TestListenerAdapter获取失败测试的数量,但是我怎样才能让Jenkins知道测试失败?

可能通过从Gradle运行任务返回退出代码或安装一些插件来检查TestListenerAdapter中失败的测试计数?

目前,我在onFinish()事件中设置了“FAILED_TESTS_COUNT”系统属性,如果它不是0,则更改管道中的构建状态,但这看起来很脏。

詹金斯2.89.3 Gradle 3.5.1 TestNG 6.9.8

1 个答案:

答案 0 :(得分:0)

我个人使用Jenkins Text Finder post-build action。在上面的示例中,它在标准输出中查找模式,并将构建设置为&#34; unstable&#34; (橙色)发现的时候。

在您的情况下,只需取消选中这两个复选框,然后找到相应的匹配模式。

Jenkins Text Finder post-build action