在Gradle测试期间,仅针对失败的测试显示标准输出和错误

2eafrhcq  于 2022-12-23  发布在  其他
关注(0)|答案(2)|浏览(163)

我在travis-ci上运行了一个大型的测试套件,它有文本输出。我希望配置gradle,使其只在失败的测试中显示标准输出和标准错误流。对于所有其他已正确执行的测试,不应发生这种情况,这样控制台就不会被噪音污染。
我知道如何启用或禁用标准输出/错误日志记录,但我不确定如何使其依赖于测试结果。

8cdiaqws

8cdiaqws1#

这可以使用以下Gradle配置进行归档

project.test {
  def outputCache = new LinkedList<String>()

  beforeTest { TestDescriptor td -> outputCache.clear() }    // clear everything right before the test starts

  onOutput { TestDescriptor td, TestOutputEvent toe ->       // when output is coming put it in the cache
    outputCache.add(toe.getMessage())
    while (outputCache.size() > 1000) outputCache.remove() // if we have more than 1000 lines -> drop first
  }

  /** after test -> decide what to print */
  afterTest { TestDescriptor td, TestResult tr ->
    if (tr.resultType == TestResult.ResultType.FAILURE && outputCache.size() > 0) {
        println()
        println(" Output of ${td.className}.${td.name}:")
        outputCache.each { print(" > $it") }
    }
  }
}

Git存储库:https://github.com/calliduslynx/gradle-log-on-failure
原始版本可在此处找到:https://discuss.gradle.org/t/show-stderr-for-failed-tests/8463/7

ldxq2e6h

ldxq2e6h2#

将以下配置块添加到您的 build.gradle 文件:

import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent

tasks.withType(Test) {
    testLogging {
        events TestLogEvent.FAILED,
               TestLogEvent.SKIPPED,
               TestLogEvent.STANDARD_ERROR,
               TestLogEvent.STANDARD_OUT
        exceptionFormat TestExceptionFormat.FULL
        showCauses true
        showExceptions true
        showStackTraces true
        showStandardStreams true
    }
}

文档可参见here

相关问题