@@ -309,6 +309,10 @@ artifacts {
309309}
310310
311311List<TestDescriptor > failedTests = []
312+ Map<String , Integer > testsAndTime = [:]
313+ Map<String , Integer > testClassesAndTime = [:]
314+ int testCount = 0
315+ long testTime = 0L
312316
313317tasks. withType(Test ) {
314318 useJUnitPlatform()
@@ -322,9 +326,19 @@ tasks.withType(Test) {
322326 dependsOn " jmhClasses"
323327
324328 afterTest { TestDescriptor descriptor , TestResult result ->
329+ testCount++
325330 if (result. getFailedTestCount() > 0 ) {
326331 failedTests. add(descriptor)
327332 }
333+ def ms = (int ) (result. endTime - result. startTime)
334+ testTime + = ms
335+ String className = descriptor. className ?: " unknown"
336+ String name = className + " ." + descriptor. displayName
337+ if (ms > 500 ) {
338+ testsAndTime[name] = ms
339+ testClassesAndTime. compute(className) { k , v -> v == null ? ms : v + ms }
340+ println " \t Test '$name ' took ${ ms} ms"
341+ }
328342 }
329343}
330344
@@ -349,6 +363,10 @@ test.dependsOn testWithJava11
349363 * See https://github.com/gradle/gradle/issues/20151
350364 */
351365gradle. buildFinished {
366+ println " \n\n "
367+ println " ============================"
368+ println " $testCount tests run in $testTime ms"
369+ println " ============================"
352370 if (! failedTests. isEmpty()) {
353371 println " \n\n "
354372 println " ============================"
@@ -359,6 +377,28 @@ gradle.buildFinished {
359377 }
360378 println " ============================"
361379 }
380+ // slowest tests
381+ println " \n\n "
382+ println " ============================"
383+ println " Top 20 slowest test classes"
384+ println " ============================"
385+ showTestResults(testClassesAndTime,20 ) { e ->
386+ println " \t Test class ${ e.key} took ${ e.value} ms"
387+ }
388+ println " \n\n "
389+ println " ============================"
390+ println " Top 50 slowest tests"
391+ println " ============================"
392+ showTestResults(testsAndTime,50 ) { e ->
393+ println " \t Test ${ e.key} took ${ e.value} ms"
394+ }
395+ }
396+
397+ static private showTestResults (Map<String , Integer > testMap , int limit , Closure closure ) {
398+ testMap. entrySet(). stream()
399+ .sorted { e1 , e2 -> e2. getValue() - e1. getValue() }
400+ .limit(limit)
401+ .forEach(closure)
362402}
363403
364404
0 commit comments