Protokollierung beim Testen durch Gradle


78

Während des Testens scheint Gradle stdout / stderr umzuleiten project_dir/build/reports/tests/index.html. Gibt es eine Möglichkeit, diese Umleitung zu vermeiden und stattdessen Dinge auf die Konsole zu drucken?

Zusätzliche Information:

  • Es ist ein Scala 2.9.1-Projekt.
  • Ich benutze slf4s für die Protokollierung.

Antworten:


95
apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

http://gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html

Dies erfordert eine aktuelle Gradle-Version. Ich gehe davon aus, dass die Scala-Tests unter der Java-Testaufgabe ausgeführt werden.


Hoppla, beim Testen sieht es so aus, als ob es nicht so wäre. Dies erzeugt jedoch eine Ausgabe für mich: pastebin.com/PX8e1EKv edit: Ändere den Druck in einen Druck, da ich denke, dass das Ereignis die Newline erfasst
Roby

Vielen Dank. Ich werde das auch versuchen. Ich habe auch einige Protokollanweisungen in Quelldateien. Wie lasse ich sie auf der Konsole drucken?
fehlender Faktor

Dies hängt von der Protokollierungsimplementierung ab. slf4s verwendet möglicherweise standardmäßig einen NOP-Logger und verwirft Ihre Protokollanweisung. Haben Sie ein Logger-Implementierungsglas im Testklassenpfad? Wenn slf4j-simple-1.6.4.jar vorhanden ist, werden INFO und höher in STDERR protokolliert. Wenn das nicht ausreicht, würde ich ein Logback-JAR hinzufügen und eine logback-test.xml einrichten, um Protokolle an die Konsole anzuhängen.
Roby

Arbeitete für mich mit Frühling / JUnit
Dmitry

Es "funktioniert möglicherweise nicht", weil die Testaufgabe als aktuell angesehen wird und nicht ausgeführt wird, sodass Sie keine Ausgabe sehen. Sie können entweder innerhalb des Blocks ( ) tun $ gradle clean testoder verwenden . Einzelheiten finden Sie in den Dokumenten . outputs.upToDateWhen {false}testLoggingtest { testLogging { outputs...
Johnny Baloney

26

Ich benutze auch ( testLogging.exceptionFormat = 'full'):

test {
    testLogging.showStandardStreams = true
    testLogging.exceptionFormat = 'full'
}

Welches ist gut, um mehr von Stacktrace zu sehen


1
Die exceptionFormatEinstellung hat bei mir funktioniert, showStandardStreamshatte keine Wirkung!
Shakeel

18

Als @roby antwortete:

Hinzufügen des folgenden Codes zu Ihrem build.gradle

apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

Wichtig!

Sie müssen den Gradle-Test ausführen oder mit einem hinzugefügten cleanBefehl erstellen .

./gradlew clean test

or

./gradlew clean build

Hoffe das funktioniert.


3
Können Sie erklären, warum "sauber" benötigt wird?
Michael Kanis

2
@ MichaelKanis, weil Sie die Gradle-Konfiguration geändert haben. Soweit ich weiß, wird die Gradle-Konfiguration zwischengespeichert.
nmfzone

1
@nmfzone bedeutet, dass Sie einen sauberen Test einmal ausführen müssen, um den Cache zu aktualisieren. In meinem Szenario muss ich jedoch jedes Mal den Befehl clean ausführen, um das Testergebnis auf der Konsole anzuzeigen. Auch wenn in den folgenden Läufen keine Änderungen an der Gradle-Konfiguration vorgenommen werden.
Weishi Zeng

@WeishiZeng Sind Sie sicher, dass Tests einfach nicht ausgeführt werden, weil sich ihre Eingaben nicht geändert haben? Wenn Sie andere Testeingaben als Java-Quelldateien haben, sollten Sie diese als Task.inputs registrieren, damit gradle weiß, wann Sie Tests erneut ausführen müssen oder nicht.
Ajax

17

Für Android Gradle-Dateien

Wenn Sie sich in einer Android-Gradle-Datei befinden (wenn sie apply plugin: 'com.android.application'sich oben in Ihrer build.gradle-Datei befindet)

Fügen Sie dies dann in build.gradle ein

// Test Logging
tasks.withType(Test) {
    testLogging {
        events "standardOut", "started", "passed", "skipped", "failed"
    }
}

Für reguläre Gradle-Dateien

Fügen Sie dies in build.gradle ein

// Test Logging
test {
    testLogging {
        showStandardStreams = true
    }
}

10
test {
    testLogging.showStandardStreams = true
}

und

test {
    testLogging {
        showStandardStreams = true
    }
}

funktioniert auch.


9

Nur um hinzuzufügen, die:

showStandardStreams = true

ist eine Abkürzung für:

events = ["standard_out", "standard_error"]

Es ist wichtig, dies zu berücksichtigen, wenn Sie beide Einträge wie folgt mischen:

test {
    testLogging {
        showStandardStreams = true
        events = ["passed", "failed", "skipped"]
    }
}

führt zu keinem Standard, während die umgekehrte Reihenfolge:

test {
    testLogging {
        events = ["passed", "failed", "skipped"]
        showStandardStreams = true
    }
}

fügt die stdout-Einträge zur Liste hinzu, damit stdout funktioniert .

Einzelheiten finden Sie in der Quelle .


Wenn showStandardStreamsdie Bestellung an zweiter Stelle steht, werden die Standard-Streams an die Ereignisliste angehängt , um dies noch einmal zu überprüfen ? Es scheint so, aber nur eine doppelte Überprüfung.
George Pantazes

2

Wenn Sie Kotlin DSL mit build.gradle.ktsder Syntax verwenden, ist das etwas anders.

Stellen Sie sicher, dass Sie den Junit in Ihren Abhängigkeiten haben:

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.4.2")
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}

Dann müssen Sie Ihrer Testaufgabe hinzufügen:

import org.gradle.api.tasks.testing.logging.TestExceptionFormat

tasks.test {
    useJUnitPlatform()
    testLogging {
        showStandardStreams = true
        exceptionFormat = TestExceptionFormat.FULL
        events("skipped", "failed")
    }
}

Anschließend können Sie die Einstellungen an Ihre Bedürfnisse anpassen.


0

In meinem Fall habe ich mit Java und Spring-Boot-Starter-Test gearbeitet.

Ich hatte das gleiche Problem und das Problem war, dass ich keine Testmaschine hatte.

Also füge ich eine zu den Abhängigkeiten von build.gradle hinzu und es hat Arbeit.

testCompile-Gruppe: 'org.junit.jupiter', Name: 'junit-jupiter-api', Version: dependencyVersion.junit5 testCompile-Gruppe: 'org.junit.jupiter', Name: 'junit-jupiter-engine', Version: dependencyVersion .junit5


0
./gradlew --info clean build test

Mit --stacktraceOption ausführen, um den Stack-Trace abzurufen. Führen Sie mit --infooder die --debugOption aus, um mehr Protokollausgabe zu erhalten. Laufen Sie mit --scan, um vollständige Einblicke zu erhalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.