题
我想查看测试结果(system.out/err,正在测试的组件中的日志消息) 当他们运行时 在同一控制台中,我运行:
gradle test
而且不要等到测试进行查看测试报告(仅在完成测试时才会生成,所以我不能在测试运行时“ tail -f”任何东西)
解决方案
您可以在命令行上运行具有信息记录级别的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} 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+现在也支持并行测试执行。只需使用一个 合适的主题.
例子
用法
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
}
希望您喜欢使用它。
“测试”任务对Android插件不起作用,用于Android插件,请使用以下内容:
// Test Logging
tasks.withType(Test) {
testLogging {
events "started", "passed", "skipped", "failed"
}
}
作为跟进 舒布姆的好答案 我喜欢建议使用 枚举 值而不是 字符串. 。请看一下 测试营的文档.
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答案。
放入 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:"