Gradle: Comment afficher les résultats des tests dans la Console en temps réel?
je voudrais voir les résultats des tests ( système./err, les messages du journal de composants testés ) comme ils courent dans la même console, je run:
gradle test
et de ne pas attendre jusqu'à ce que les essais soient faits pour examiner les rapports d'essais ( qui ne sont générés que lorsque les essais sont terminés, de sorte que je ne peux pas "tail-f" quoi que ce soit pendant que les essais sont en cours)
11 réponses
vous pouvez lancer Gradle avec le niveau de journalisation de l'information sur la ligne de commande. Il vous montrera le résultat de chaque test pendant qu'ils sont en cours d'exécution. Inconvénient est que vous aurez beaucoup plus de sortie pour d'autres tâches aussi.
gradle test -i
vous pouvez ajouter une fermeture Groovy à l'intérieur de votre construction.fichier gradle qui fait la journalisation pour vous:
test {
afterTest { desc, result ->
logger.quiet "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
}
}
sur votre console il se lit alors comme ceci:
: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
depuis la version 1.1 Gradle soutient beaucoup plus d'options pour enregistrer la sortie de test . Avec ces options, vous pouvez obtenir une sortie similaire avec la configuration suivante:
test {
testLogging {
events "passed", "skipped", "failed"
}
}
voici ma version Fantaisie:
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))
}
}
}
}
Comme stefanglase "151980920 répondit:
ajouter le code suivant à votre build.gradle
(depuis la version 1.1) fonctionne bien pour la sortie sur passé , sauté et échec tests.
test {
testLogging {
events "passed", "skipped", "failed", "standardOut", "standardError"
}
}
ce que je veux dire en plus (j'ai découvert que c'est un problème pour les débutants) est que la commande gradle test
exécute le test un seul heure par changement .
ainsi si vous l'exécutez la deuxième fois il n'y aura pas de sortie sur les résultats d'essai . Vous pouvez également le voir dans la sortie du bâtiment: gradle dit alors à jour sur les tests. Ce n'est donc pas la première fois qu'il est exécuté.
Smart Grad!
si vous voulez forcer les cas de test à s'exécuter, utilisez gradle cleanTest test
.
c'est légèrement hors sujet mais J'espère que ça aidera certains débutants.
modifier
Comme sparc_spread , a indiqué dans les commentaires:
si vous voulez forcer gradle à toujours exécuter des tests frais (ce qui pourrait ne pas toujours être une bonne idée), vous pouvez ajouter outputs.upToDateWhen {false}
à testLogging { [...] }
. Continuer la lecture ici .
de la Paix.
clause de non-responsabilité: je suis le développeur du Plugin Gradle test Logger.
vous pouvez utiliser le Gradle test Logger Plugin pour imprimer de belles logs sur la console. Le plugin offre un certain nombre de thèmes et d'options de configuration pour convenir à un large public.
Note: Gradle test Logger Plugin V1.4+ supporte maintenant aussi l'exécution de test en parallèle. Utilisez simplement un thème approprié .
exemples
Utilisation
plugins {
id 'com.adarshr.test-logger' version '<version>'
}
assurez-vous que vous obtenez toujours la dernière version de Gradle Central .
Configuration
vous n'avez besoin d'aucune configuration. Cependant, le plugin offre quelques options. Ceci peut être fait comme suit (valeurs par défaut affichées):
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 threshold in milliseconds to highlight slow tests
slowThreshold 1000
// displays a breakdown of passes, failures and skips along with total duration
showSummary true
// 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
}
j'espère que vous aimerez l'utiliser.
"test" tâche de ne pas travailler pour Android plugin, pour Android plugin utilise le suivant:
// Test Logging
tasks.withType(Test) {
testLogging {
events "started", "passed", "skipped", "failed"
}
}
voir le texte suivant: https://stackoverflow.com/a/31665341/3521637
comme suite à la grande réponse de Shubham j'aime suggérer d'utiliser enum valeurs au lieu de cordes . Veuillez consulter la documentation de la classe .
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
}
}
en Gradle utilisant Android plugin:
gradle.projectsEvaluated {
tasks.withType(Test) { task ->
task.afterTest { desc, result ->
println "Executing test ${desc.name} [${desc.className}] with result: ${result.resultType}"
}
}
}
alors la sortie sera:
l'Exécution de test testConversionMinutes [org.exemple.App.test.DurationTest] avec résultat: succès
ma version minimaliste préférée basée sur la réponse de Shubham Chaudhary.
Mettre cela en build.gradle
fichier:
test {
afterSuite { desc, result ->
if (!desc.parent)
println("${result.resultType} " +
"(${result.testCount} tests, " +
"${result.successfulTestCount} successes, " +
"${result.failedTestCount} failures, " +
"${result.skippedTestCount} skipped)")
}
}
Fusion Shubham de la grande réponse et JJD utiliser enum au lieu de string
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))
}
}
}
}