如何在构建过程中从gradle输出中获取测试定时信息?

jjhzyzn0  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(110)

我想在gradle输出中获得整个 *.java类运行所需时间的计时信息以及每个测试的计时信息。有没有办法用gradle做到这一点?
目前,我只有

beforeTest{ descr ->
    logger.warn("Starting Test ${descr.className} : ${descr.name}")
  }

字符串

t2a7ltrp

t2a7ltrp1#

这取决于你的意图。出于调试目的,我通常使用--profile标志运行gradle,它会生成任务执行时间的完整报告。请参阅Gradle Command Line
如果你想对时间做一些特别的事情,你需要编写所需的行为。例如,这将打印每个测试的执行时间:

test {
  afterTest { descriptor, result ->
    def totalTime = result.endTime - result.startTime
    println "Total time of $descriptor.name was $totalTime"
  }
}

字符串
另请参阅:

46scxncf

46scxncf2#

将米利斯四舍五入为秒的公认答案的变体:

test {
    afterSuite { descriptor, result ->
        def duration = java.util.concurrent.TimeUnit.MILLISECONDS
                .toSeconds(result.endTime - result.startTime)
        println "Total duration of $descriptor: $duration seconds"
    }
}

字符串

f45qwnt8

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) }
    }
}

字符串

相关问题