Градл: Как показать результаты теста в консоли в режиме реального времени?

StackOverflow https://stackoverflow.com/questions/3963708

  •  09-10-2019
  •  | 
  •  

Вопрос

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

gradle test

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

Это было полезно?

Решение

Вы можете запустить RODLE с уровнем регистрации информации в командной строке. Это покажет вам результат каждого теста, пока они работают. Недостатком является то, что вы получите гораздо более вывод для других задач.

gradle test -i

Другие советы

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

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))
            }
        }
    }
}

Вы можете добавить закрытие 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 Ridle поддерживает много Больше вариантов для журнала тестового выхода. Отказ С помощью этих вариантов под рукой вы можете достичь аналогичного выхода со следующей конфигурацией:

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

Так как Stefanglase. Ответил:

Добавление следующего кода к вашему build.gradle (поскольку версия 1.1) работает нормально для вывода на прошедший, пропущено а также не удалось Тесты.

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

То, что я хочу сказать дополнительно (я узнал, что это проблема для начала) что gradle test Команда выполняет тест только один раз за изменение.

Так что если вы управляете его Второй раз не будет вывода на результаты тестов. Отказ Вы также можете увидеть это на выходе здания: Грейл затем говорит ДО НАСТОЯЩЕГО ВРЕМЕНИ на тестах. Так что это не казнил не-то время.

Умная роса!

Если вы хотите заставить тестовые случаи работать, используйте gradle cleanTest test.

Это немного от темы, но я надеюсь, что это поможет некоторым новичкам.

редактировать

Так как sparc_spread. Указано в комментариях:

Если вы хотите заставить просрочку до Всегда запустите свежие тесты (что может не всегда быть хорошей идеей) вы можете добавить outputs.upToDateWhen {false} к testLogging { [...] }. Отказ продолжить чтение здесь.

Мир.

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

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

ПРИМЕЧАНИЕ. PLUCKIN V1.4 Test Test 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
}

Я надеюсь, что вам понравится, используя его.

Добавьте это в build.gradle Чтобы остановить Грейл от глотания 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.

Как следующее Великий ответ Шубхама Мне нравится предлагать, используя порицать ценности вместо строки. Отказ Пожалуйста, посмотрите на Документация класса 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
    }
}

Моя любимая минималистичная версия на основе ответа Шубхама Чаудгари.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)")
    }
}

В 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] с результатом: успех

Слияние Великий ответ Шубхама а также JJD использует Enum вместо строки

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

    // set options for log level DEBUG and INFO
       debug {
        events TestLogEvent.STARTED, TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED, TestLogEvent.STANDARD_OUT, TestLogEvent.STANDARD_ERROR
        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))
           }
       }
   }
}

Следуя от Ответ Бенджамина Муске (19 марта 2011 г.) вы можете использовать -i Флаг вместе с овладеть, чтобы отфильтровать 1000-х нежелательных линий. Примеры:

Сильный фильтр - отображать только каждое имя теста устройства и результат, а также общий статус сборки. Ошибки настройки или исключения не отображаются.

./gradlew test -i | grep -E " > |BUILD"

Мягкий фильтр - Отображать каждое имя теста устройства и результат, а также ошибки настройки / исключения. Но он также включает некоторую нерелевантную информацию:

./gradlew test -i | grep -E -v "^Executing |^Creating |^Parsing |^Using |^Merging |^Download |^title=Compiling|^AAPT|^future=|^task=|:app:|V/InstrumentationResultParser:"

Мягкий фильтр, альтернативный синтаксис: (токены поиска разделены на отдельные строки)

./gradlew test -i | grep -v -e "^Executing " -e "^Creating " -e "^Parsing " -e "^Using " -e "^Merging " -e "^Download " -e "^title=Compiling" -e "^AAPT" -e "^future=" -e "^task=" -e ":app:" -e "V/InstrumentationResultParser:"

Объяснение того, как он работает: Выход первой команды, ./gradlew test -i, трубопровод с второй командой grep, который отфилит от многих нежелательных линий на основе регулярного выражения. "-E" Включает регулярное выражение режима и "|" означает «или». Имя теста устройства и результат разрешено отображать использование " > ", и общий статус разрешен с "BUILD". Отказ В мягком фильтре, "-v" Флаг означает «Не содержащий» а также "^" означает «начало строки». Таким образом, он разбивает все линии, которые начинаются с «выполнения» или начнутся с «создания» и т. Д.


Пример для приборов Android-приборостроения, с помощью Gradle 5.1:

./gradlew connectedDebugAndroidTest --continue -i | grep -v -e \
"^Transforming " -e "^Skipping " -e "^Cache " -e "^Performance " -e "^Creating " -e \
"^Parsing " -e "^file " -e "ddms: " -e ":app:" -e "V/InstrumentationResultParser:"

Пример для охвата тестирования единиц Jacoco, с Redle 4.10:

./gradlew createDebugCoverageReport --continue -i | grep -E -v "^Executing |^Creating |^Parsing |^Using |^Merging |^Download |^title=Compiling|^AAPT|^future=|^task=|:app:|V/InstrumentationResultParser:"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top