我想查看测试结果(system.out/err,正在测试的组件中的日志消息) 当他们运行时 在同一控制台中,我运行:

gradle test

而且不要等到测试进行查看测试报告(仅在完成测试时才会生成,所以我不能在测试运行时“ tail -f”任何东西)

有帮助吗?

解决方案

您可以在命令行上运行具有信息记录级别的Gradle。它将向您显示每个测试在运行时的结果。缺点是,对于其他任务,您也将获得更多的输出。

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

您可以在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"
    }
}

作为 Stefanglase 回答:

将以下代码添加到您的 build.gradle (自版本1.1)的运行良好 通过, 跳过失败的 测试。

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

我想另外说的是(我发现这是首发的问题) gradle test 命令执行测试 每个更改只有一次.

因此,如果您正在运行它 第二次测试结果不会输出. 。您还可以在建筑物的输出中看到这一点:Gradle然后说 最新 在测试中。因此,它没有第n次执行。

聪明的gradle!

如果要强迫测试用例运行,请使用 gradle cleanTest test.

这有点不合时宜,但我希望它对一些新手有帮助。

编辑

作为 sparc_spread 在评论中说明:

如果您想强迫Gradle 始终进行新的测试 (这可能并不总是一个好主意)您可以添加 outputs.upToDateWhen {false}testLogging { [...] }. 。继续阅读 这里.

和平。

免责声明:我是Gradle Test Logger插件的开发人员。

您可以简单地使用 Gradle测试记录仪插件 在控制台上打印美丽的日志。该插件使用明智的默认值来满足大多数用户的配置,但还提供了许多主题和配置选项以适合所有人。

注意: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
}

希望您喜欢使用它。

添加到 build.gradle 阻止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

作为跟进 舒布姆的好答案 我喜欢建议使用 枚举 值而不是 字符串. 。请看一下 测试营的文档.

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

我最喜欢的简约版本基于Shubham Chaudhary答案。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}"
        }
    }
}

然后输出将是:

执行test testconversionminutes [org.example.app.test.durationTest]结果:成功

合并 舒布姆的好答案JJD使用枚举而不是字符串

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

跟随 本杰明·穆什科(Benjamin Muschko)的答案 (2011年3月19日),您可以使用 -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仪器单元测试的示例,带有5.1的Gradle:

./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单元测试覆盖范围的示例,Grad 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