我想在gradle输出中获得整个 *.java类运行所需时间的计时信息以及每个测试的计时信息。有没有办法用gradle做到这一点?目前,我只有
beforeTest{ descr -> logger.warn("Starting Test ${descr.className} : ${descr.name}") }
字符串
t2a7ltrp1#
这取决于你的意图。出于调试目的,我通常使用--profile标志运行gradle,它会生成任务执行时间的完整报告。请参阅Gradle Command Line。如果你想对时间做一些特别的事情,你需要编写所需的行为。例如,这将打印每个测试的执行时间:
--profile
test { afterTest { descriptor, result -> def totalTime = result.endTime - result.startTime println "Total time of $descriptor.name was $totalTime" } }
字符串另请参阅:
46scxncf2#
将米利斯四舍五入为秒的公认答案的变体:
test { afterSuite { descriptor, result -> def duration = java.util.concurrent.TimeUnit.MILLISECONDS .toSeconds(result.endTime - result.startTime) println "Total duration of $descriptor: $duration seconds" } }
f45qwnt83#
Gragle 8.5,Kotlin,打印3个最长的测试:
data class TestDuration(val name: String, val duration: Duration) { override fun toString() = "$name $duration" } val testDurations = mutableListOf<TestDuration>() tasks.test { useJUnitPlatform() addTestListener(object : TestListener { override fun beforeSuite(suite: TestDescriptor) {} override fun afterSuite(suite: TestDescriptor, result: TestResult) {} override fun beforeTest(testDescriptor: TestDescriptor) {} override fun afterTest(testDescriptor: TestDescriptor, result: TestResult) { testDurations.add( TestDuration( name = "${testDescriptor.className}.${testDescriptor.name}", duration = Duration.ofMillis(result.endTime - result.startTime) ) ) } }) doLast { println("Longest 3 tests") testDurations.sortedBy { it.duration } .reversed() .take(3) .forEach { println(it) } } }
3条答案
按热度按时间t2a7ltrp1#
这取决于你的意图。出于调试目的,我通常使用
--profile
标志运行gradle,它会生成任务执行时间的完整报告。请参阅Gradle Command Line。如果你想对时间做一些特别的事情,你需要编写所需的行为。例如,这将打印每个测试的执行时间:
字符串
另请参阅:
46scxncf2#
将米利斯四舍五入为秒的公认答案的变体:
字符串
f45qwnt83#
Gragle 8.5,Kotlin,打印3个最长的测试:
字符串