繁体   English   中英

Gradle 测试 - 为失败的测试打印标准输出/标准错误

[英]Gradle test - print stdout/stderror for failed tests

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

默认情况下,gradle 不会打印这些测试的stdout 我知道如果通过--info它将这样做,但是测试套件的大小约为 1500 个测试,这使得管道 output 非常冗长(如果我为完整套件打开它并尝试在 Github 中查看生成的 output)。

为了解决最初的初期问题,我还采用了针对失败的套件(例如./gradlew test --tests "foo.bar.AppTest" --info )。 不过,这有点小题大做。 有没有办法告诉 gradle 仅为失败的测试打印标准输出内容? 这将使我在一个更好的 position 前进!

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

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

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 应用程序时在此相关答案中提到的,可以使用以下内容(root 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 项目,相同的解决方案将通过删除在子模块上迭代的部分来工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM