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

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

gradle test

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

Ответы [ 12 ]

3 голосов
/ 30 ноября 2016

Слияние Великолепный ответ Шубхам и 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))
           }
       }
   }
}
2 голосов
/ 20 октября 2018

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

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

./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, с Gradle 4.10:

./gradlew createDebugCoverageReport --continue -i | grep -E -v "^Executing |^Creating |^Parsing |^Using |^Merging |^Download |^title=Compiling|^AAPT|^future=|^task=|:app:|V/InstrumentationResultParser:"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...