Simple Benchmark 是一个简单的 Java 方法性能测试 SDK。主要用于开发环境下,对方法进行短时间(如 1 到 15 分钟以内)的性能测试,并得到一个简单的性能报告,以便于快速的评估方法的实际性能指标。如果需要更加详尽和专业的性能数据,请使用 JMeter 工具。
Simple Benchmark 实现了一个计数的测试器和一个计时的测试器,默认情况下,测试结果示例如下:
20:01:46 success: 000000041 failed: 000000 TPS: 000041 RTT: 210.402ms
20:01:47 success: 000000108 failed: 000000 TPS: 000067 RTT: 160.257ms
20:01:48 success: 000000179 failed: 000000 TPS: 000071 RTT: 134.440ms
20:01:49 success: 000000249 failed: 000000 TPS: 000070 RTT: 147.903ms
20:01:50 success: 000000315 failed: 000000 TPS: 000066 RTT: 153.323ms
20:01:51 success: 000000390 failed: 000000 TPS: 000075 RTT: 131.452ms
20:01:52 success: 000000462 failed: 000000 TPS: 000072 RTT: 145.598ms
20:01:53 success: 000000533 failed: 000000 TPS: 000071 RTT: 135.035ms
20:01:54 success: 000000609 failed: 000000 TPS: 000076 RTT: 133.958ms
20:01:55 success: 000000680 failed: 000000 TPS: 000071 RTT: 147.998ms
Name: 计时性能测试
Threads: 10
Duration: 10.093s
Total Count: 682
Success Count: 682
Failed Count: 0
Average TPS: 67
Average RTT: 147.04ms
Max Time Consuming: 602.487ms
Min Time Consuming: 29.996ms
Test stopped......
测试方法在指定线程数下一段时间内的性能指标。
class TimingBenchmarkTest {
@Test
public void test() {
Benchmark.ofTiming(
Duration.ofSeconds(10), // (1)
10, // (2)
() -> KeyPairGenerator.getInstance("RSA").generateKeyPair()) // (3)
.benchmark();
}
}
-
设置测试的时间长度
-
设置测试的线程数
-
设置测试的内容
设置固定的测试次数,用指定的线程数测试方法。
class CountBenchmarkTest {
@Test
public void test() {
Benchmark.ofCount(
100, // (1)
10, // (2)
() -> KeyPairGenerator.getInstance("RSA").generateKeyPair()) // (3)
.benchmark();
}
}
-
设置测试的总次数
-
设置测试的线程数
-
设置测试的内容
在 JUnit5 测试框架下,可以通过注解 BenchmarkCount
和 BenchmarkTiming
对方法进行测试。
class BenchmarkTimingExtensionTest {
@DisplayName("计时性能测试")
@BenchmarkTiming(duration = 10, threads = 10)
public void test() throws GeneralSecurityException {
KeyPairGenerator.getInstance("RSA").generateKeyPair();
}
}
class BenchmarkCountExtensionTest {
@DisplayName("计数性能测试")
@BenchmarkCount(count = 100, threads = 10)
public void test() throws GeneralSecurityException {
KeyPairGenerator.getInstance("RSA").generateKeyPair();
}
}
属性 |
说明 |
|
|
threads |
测试线程数,默认为 1 个线程。 |
duration |
测试时长,默认值为 1,时间单位由 |
unit |
测试时长的单位,默认为 |
warmUpSeconds |
测试预热时间,单位为秒,默认为 0 秒,即不预热。 |
|
|
threads |
测试线程数,默认为 1 个线程。 |
count |
测试的总次数,默认为 1 次。 |
warmUp |
测试的预热次数,默认为 0 次,即不预热。 |