Gradle: как отобразить результаты теста в консоли в режиме реального времени? - PullRequest
193 голосов
/ 19 октября 2010

Я хотел бы видеть результаты теста (system.out / err, сообщения журнала от тестируемых компонентов) , поскольку они запускаются в той же консоли, которую я запускаю:

gradle test

И не ждите, пока не будут выполнены тесты, чтобы посмотреть отчеты о тестах (которые генерируются только после завершения тестов, поэтому я не могу ничего "tail -f" во время выполнения тестов)

Ответы [ 12 ]

140 голосов
/ 19 марта 2011

Вы можете запустить Gradle с уровнем ведения журнала INFO в командной строке.Он покажет вам результаты каждого теста, пока они работают.Недостатком является то, что вы получите гораздо больше выходных данных и для других задач.

gradle test -i
139 голосов
/ 27 ноября 2010

Вы можете добавить Groovy-замыкание в свой файл build.gradle, который делает запись для вас:

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"
    }
}
136 голосов
/ 21 марта 2016

Вот моя модная версия:

fancy test result

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} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)"
                def startItem = '|  ', endItem = '  |'
                def repeatLength = startItem.length() + output.length() + endItem.length()
                println('\n' + ('-' * repeatLength) + '\n' + startItem + output + endItem + '\n' + ('-' * repeatLength))
            }
        }
    }
}
98 голосов
/ 03 декабря 2013

Как 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 { [...] }. Продолжить чтение здесь .

Мир.

65 голосов
/ 02 октября 2017

Отказ от ответственности: я являюсь разработчиком подключаемого модуля Gradle Test Logger.

Вы можете просто использовать подключаемый модуль Gradle Test Logger для печати красивых журналов на консоли,Плагин использует разумные значения по умолчанию, чтобы удовлетворить большинство пользователей с минимальной или нулевой конфигурацией, но также предлагает ряд тем и опций конфигурации на любой вкус.

Примечание. Плагин Gradle Test Logger v1.4 + теперь поддерживает параллельныйвыполнение теста тоже.Просто используйте подходящую тему .

Примеры

Standard Theme Стандартная тема

Mocha Theme Мокко тема

Использование

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
}

Надеюсь, вам понравится.

44 голосов
/ 21 января 2015

Добавьте это к build.gradle, чтобы остановить проглочение от проглатывания stdout и stderr.

test {
    testLogging.showStandardStreams = true
}

Это задокументировано здесь .

34 голосов
/ 28 июля 2015

Задание 'test' не работает для плагина Android, для плагина Android используйте следующее:

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

См. Следующее: https://stackoverflow.com/a/31665341/3521637

17 голосов
/ 24 марта 2016

Как продолжение до Отличный ответ Шубхама Я хотел бы предложить использовать enum значения вместо строк .Пожалуйста, ознакомьтесь с документацией класса TestLogging .

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

tasks.withType(Test) {
    testLogging {
        events TestLogEvent.FAILED,
               TestLogEvent.PASSED,
               TestLogEvent.SKIPPED,
               TestLogEvent.STANDARD_ERROR,
               TestLogEvent.STANDARD_OUT
        exceptionFormat TestExceptionFormat.FULL
        showCauses true
        showExceptions true
        showStackTraces true
    }
}
10 голосов
/ 31 мая 2017

Моя любимая минималистичная версия, основанная на ответе Шубхам Чаудхари. enter image description here

Поместите это в build.gradle файл:

test {
    afterSuite { desc, result ->
    if (!desc.parent)
        println("${result.resultType} " +
            "(${result.testCount} tests, " +
            "${result.successfulTestCount} successes, " +
            "${result.failedTestCount} failures, " +
            "${result.skippedTestCount} skipped)")
    }
}
7 голосов
/ 08 сентября 2015

В Gradle с помощью плагина Android:

gradle.projectsEvaluated {
    tasks.withType(Test) { task ->
        task.afterTest { desc, result ->
            println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
        }
    }
}

Тогда вывод будет:

Выполнение теста testConversionMinutes [org.example.app.test.DurationTest] с результатом: SUCCESS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...