我将在现有项目中引入一个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项目,相同的解决方案将通过删除子模块上迭代的部分来工作