Search code examples
javatestinggradlegradlew

Gradle test - print stdout/stderror for failed tests


I'm introducing a Github actions pipeline to an existing project to run ./gradlew test. Unsurprisingly, I've run into cases where tests pass locally but not on the build machine, due to various things like mismatching timezones.

By default, gradle doesn't print the stdout for these tests. I am aware that it will do so if passed --info, however the test suite is some 1500 tests in size which makes the pipeline output extremely verbose (it actually makes my browser lag if I turn it on for the full suite and try to view the resulting output in Github).

To fix the initial teething problems, I've resorted to also targeting the suites that are failing (e.g. ./gradlew test --tests "foo.bar.AppTest" --info). This is a bit of a faff, though. Is there a way to tell gradle to print the stdout contents just for tests that have failed? This would put me in a much better position going forward!


Solution

  • This page contains what you are looking for.

    It boils down to configuring the test task like so:

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

    There are more options to finely control logging if you read that page.


    Since you probably only need this for github actions, you can use the CI environmental variable to enable your configurations on CI environments only:

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

    Other CI providers also set this environmental variable