我希望能够在同一控制台中实时查看测试结果(包括system.out / err、被测试组件的日志消息)。
gradle test
在测试完成后生成的测试报告中查看测试结果是不够及时的,因为在测试运行期间无法实时查看报告。
我希望能够在同一控制台中实时查看测试结果(包括system.out / err、被测试组件的日志消息)。
gradle test
在测试完成后生成的测试报告中查看测试结果是不够及时的,因为在测试运行期间无法实时查看报告。
这是我的华丽版本:
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} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)"
def startItem = '| ', endItem = ' |'
def repeatLength = startItem.length() + output.length() + endItem.length()
println('\n' + ('-' * repeatLength) + '\n' + startItem + output + endItem + '\n' + ('-' * repeatLength))
}
}
}
}
你可以在命令行上以INFO日志级别运行Gradle。这样它会显示每个测试运行时的结果。缺点是你也会得到其他任务的远多于正常输出。
gradle test -i
test
闭包中直接使用[testLogging.showStandardStreams = true](http://forums.gradle.org/gradle/topics/seeing_test_output_at_the_console)进行配置。您可以使用此功能来查看测试输出结果。 - Benjamin Muschko-i
会在终端上输出一堆无关的信息。 - Thuy Trinhgrep
过滤掉成千上万不需要的行。请参阅 https://dev59.com/sW865IYBdhLWcg3wIrFg#52904915。 - Mr-IDE免责声明:我是Gradle Test Logger插件的开发者。
您可以使用Gradle Test Logger插件在控制台上打印漂亮的日志。该插件使用明智的默认设置,以满足大多数用户的需求,并提供许多主题和配置选项来适应各种需求。
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文件中添加一个Groovy闭包,以便为您进行日志记录:
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 就会在测试上说UP-TO-DATE,因此没有被执行第 n 次。
聪明的 gradle!
如果你想强制运行测试用例,请使用 gradle cleanTest test
命令。
虽然略微偏题,但我希望这能帮助一些新手。
编辑
正如sparc_spread在评论中提到的:
如果你想让 gradle 总是运行新的测试(这可能并不总是一个好主意),你可以在 testLogging { [...] }
中添加 outputs.upToDateWhen {false}
。继续阅读这里。
和平。
gradle cleanTest test
的方法。将 outputs.upToDateWhen {false}
添加到 testLogging {...}
中即可。这将强制Gradle每次运行测试。我发现这个方法在Gradle论坛上由Dockter本人发布。希望对你有所帮助。 - sparc_spreadexceptionFormat "full"
以获取有关失败细节的信息,在使用AssertJ或类似库时非常有用。 - Shairon Toledotest --rerun-tasks
替代cleanTest
。 - gavenkoa--rerun-tasks
会重新运行所有任务,而不仅仅是测试任务。 - ThomasWcleanTest test
,但是--rerun-tasks
解决了问题。不知道为什么。但是阅读这个答案真的解决了我的头痛问题,我添加所有内容后在哪里可以找到测试日志。 - Wingzeroval test by tasks.getting(Test::class) { testLogging.showStandardStreams = true }
。 - Brad Turek'test' 任务在 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)")
}
}
在使用 Android 插件的 Gradle 中:
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],结果为:成功