由于我无法影响的原因,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