[testing] Gradle : 실시간으로 콘솔에 테스트 결과를 표시하는 방법

내가 실행 하는 동일한 콘솔에서 테스트 결과 (system.out / err, 테스트중인 구성 요소의 로그 메시지) 를보고 싶습니다.

gradle test

그리고 테스트가 완료 될 때만 생성되는 테스트 보고서를보기 위해 테스트가 완료 될 때까지 기다리지 마십시오.



답변

명령 행에서 INFO 로깅 레벨로 Gradle을 실행할 수 있습니다. 실행중인 각 테스트의 결과를 보여줍니다. 단점은 다른 작업에 대해서도 훨씬 더 많은 결과를 얻을 수 있다는 것입니다.

gradle test -i


답변

여기 내 멋진 버전이 있습니다.

멋진 테스트 결과

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

tasks.withType(Test) {
    testLogging {
        // set options for log level LIFECYCLE
        events TestLogEvent.FAILED,
               TestLogEvent.PASSED,
               TestLogEvent.SKIPPED,
               TestLogEvent.STANDARD_OUT
        exceptionFormat TestExceptionFormat.FULL
        showExceptions true
        showCauses true
        showStackTraces true

        // set options for log level DEBUG and INFO
        debug {
            events TestLogEvent.STARTED,
                   TestLogEvent.FAILED,
                   TestLogEvent.PASSED,
                   TestLogEvent.SKIPPED,
                   TestLogEvent.STANDARD_ERROR,
                   TestLogEvent.STANDARD_OUT
            exceptionFormat TestExceptionFormat.FULL
        }
        info.events = debug.events
        info.exceptionFormat = debug.exceptionFormat

        afterSuite { desc, result ->
            if (!desc.parent) { // will match the outermost suite
                def output = "Results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)"
                def startItem = '|  ', endItem = '  |'
                def repeatLength = startItem.length() + output.length() + endItem.length()
                println('\n' + ('-' * repeatLength) + '\n' + startItem + output + endItem + '\n' + ('-' * repeatLength))
            }
        }
    }
}


답변

build.gradle 파일 내에 Groovy 클로저를 추가하여 로깅을 수행 할 수 있습니다.

test {
    afterTest { desc, result -> 
        logger.quiet "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
    }
}

콘솔에서 다음과 같이 읽습니다.

:compileJava UP-TO-DATE
:compileGroovy
:processResources
:classes
:jar
:assemble
:compileTestJava
:compileTestGroovy
:processTestResources
:testClasses
:test
Executing test maturesShouldBeCharged11DollarsForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
Executing test studentsShouldBeCharged8DollarsForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
Executing test seniorsShouldBeCharged6DollarsForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
Executing test childrenShouldBeCharged5DollarsAnd50CentForDefaultMovie [movietickets.MovieTicketsTests] with result: SUCCESS
:check
:build

1.1 버전부터 Gradle은 테스트 출력을 기록 하는 훨씬 더 많은 옵션을 지원합니다 . 이러한 옵션을 사용하면 다음 구성으로 유사한 출력을 얻을 수 있습니다.

test {
    testLogging {
        events "passed", "skipped", "failed"
    }
}


답변

stefanglase 가 대답 한 것처럼 :

다음 코드를 build.gradle(버전 1.1 이후)에 추가하면 통과 , 건너 뛰기실패한 테스트 에서 출력에 잘 작동합니다 .

test {
    testLogging {
        events "passed", "skipped", "failed", "standardOut", "standardError"
    }
}

추가로 말하고 싶은 것은 (이것이 초보자에게는 문제라는 것을 알았습니다) gradle test명령이 변경 당 한 번만 테스트를 실행한다는 입니다.

따라서 두 번째 로 실행하면 테스트 결과에 대한 출력이 없습니다 . 또한 건물 출력에서 ​​이것을 볼 수 있습니다. gradle 은 테스트에서 UP-TO-DATE 라고 말합니다 . 따라서 n 번째로 실행되지 않았습니다.

똑똑한 gradle!

테스트 케이스를 강제 실행하려면을 사용하십시오 gradle cleanTest test.

이것은 약간 주제가 아니지만 일부 초보자에게 도움이되기를 바랍니다.

편집하다

sparc_spread 의견에 명시된 :

당신이에 Gradle을 강제하려면 항상 실행 신선한 테스트 (항상 좋은 아이디어되지 않을 수도 있습니다)을 추가 할 수 있습니다 outputs.upToDateWhen {false}testLogging { [...] }. 여기를 계속 읽으 십시오 .

평화.


답변

면책 조항 : 저는 Gradle Test Logger Plugin 개발자입니다.

Gradle Test Logger 플러그인 을 사용 하여 콘솔에서 아름다운 로그를 인쇄 할 수 있습니다 . 이 플러그인은 합리적인 기본값을 사용하여 구성이 거의 없거나 전혀없는 대부분의 사용자를 만족시킬뿐 아니라 모든 사용자에게 적합한 다양한 테마와 구성 옵션을 제공합니다.

표준 테마
표준 테마

모카 테마
모카 테마

용법

plugins {
    id 'com.adarshr.test-logger' version '<version>'
}

Gradle Central에서 항상 최신 버전을 구하십시오 .

구성

구성이 전혀 필요하지 않습니다. 그러나 플러그인은 몇 가지 옵션을 제공합니다. 다음과 같이 수행 할 수 있습니다 (표시된 기본값).

testlogger {
    // pick a theme - mocha, standard, plain, mocha-parallel, standard-parallel or plain-parallel
    theme 'standard'

    // set to false to disable detailed failure logs
    showExceptions true

    // set to false to hide stack traces
    showStackTraces true

    // set to true to remove any filtering applied to stack traces
    showFullStackTraces false

    // set to false to hide exception causes
    showCauses true

    // set threshold in milliseconds to highlight slow tests
    slowThreshold 2000

    // displays a breakdown of passes, failures and skips along with total duration
    showSummary true

    // set to true to see simple class names
    showSimpleNames false

    // set to false to hide passed tests
    showPassed true

    // set to false to hide skipped tests
    showSkipped true

    // set to false to hide failed tests
    showFailed true

    // enable to see standard out and error streams inline with the test results
    showStandardStreams false

    // set to false to hide passed standard out and error streams
    showPassedStandardStreams true

    // set to false to hide skipped standard out and error streams
    showSkippedStandardStreams true

    // set to false to hide failed standard out and error streams
    showFailedStandardStreams true
}

나는 당신이 그것을 사용 즐기시기 바랍니다.


답변

build.gradlegradle 이 stdout과 stderr를 삼키지 못하게하려면 이것을 추가하십시오 .

test {
    testLogging.showStandardStreams = true
}

여기에 문서화되어 있습니다 .


답변

Android 플러그인의 경우 ‘테스트’작업이 작동하지 않습니다. Android 플러그인의 경우 다음을 사용하십시오.

// Test Logging
tasks.withType(Test) {
    testLogging {
        events "started", "passed", "skipped", "failed"
    }
}

다음을 참조하십시오 : https://stackoverflow.com/a/31665341/3521637