渐变测试-为失败的测试打印stdout/stdferror



我将在现有项目中引入一个Github操作管道来运行./gradlew test。不出所料,我遇到过一些情况,由于时区不匹配等原因,测试在本地通过,但在构建机器上没有通过。

默认情况下,gradle不会打印这些测试的stdout。我知道,如果通过--info,它会这样做,但测试套件的大小约为1500个测试,这使得管道输出非常冗长(如果我为整个套件打开它并尝试在Github中查看结果输出,这实际上会使我的浏览器滞后(。

为了解决最初的初期问题,我还针对失败的套件(例如./gradlew test --tests "foo.bar.AppTest" --info(。不过,这有点麻烦。有没有办法告诉gradle只为失败的测试打印stdout内容?这会让我在前进中处于一个更好的位置!

此页面包含您要查找的内容。

它可以归结为这样配置测试任务:

test {
testLogging {
// set options for log level LIFECYCLE
events "failed"
}
}

如果您阅读了该页面,还有更多的选项可以精细地控制日志记录。


由于您可能只需要github操作,因此您可以使用CI环境变量仅在CI环境上启用配置:

test {
doFirst {
if (System.getenv('CI')) {
testLogging {
// set options for log level LIFECYCLE
events "failed"
}
}
}
}

其他CI提供商也设置了此环境变量

如本相关答案中所述,在处理多模块android应用程序时,可以使用以下内容(根build.gradle(

// Call from root build.gradle
setupTestLogging()
fun Project.setupTestLogging() {
for (sub in subprojects) {
sub.tasks.withType<Test> {
testLogging {
exceptionFormat = TestExceptionFormat.FULL
}
}
}
}

(注意,虽然单独的exceptionFormat应该足以获得所需的结果,但上面提到的events("standardOut" ...)可以以相同的方式指定(。

对于单模块android项目,相同的解决方案将通过删除子模块上迭代的部分来工作

最新更新