一、背景
最近写文章需要了解和对比一些函数的性能差异,因此在网上找到了一个简单易用的 Java 性能测试框架 junitperf。
官方介绍它的优势是:
- 可以和 Junit5 完美契合。
- 使用简单,便于项目开发过程中的测试实用。
- 提供拓展,用户可进行自定义开发。
二、范例
2.1 依赖
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.houbb/junitperf -->
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>junitperf</artifactId>
<version>2.0.3</version>
</dependency>
大家可以使用本人在剖析《阿里巴巴 Java 开发手册》专栏中讲到的“先猜想后验证” 的学习方法,这样印象更深刻,学习效果更好。
通过上图,我们可以猜测,该框架使用 freemarkder 生成 HTML 报告,使用 commons-math3 进行性能计算,使用 junit-jupiter-engine 支持 Junit 5的特性等。
感兴趣大家可以 clone 项目深入研究。
大家还可以通过查看单元测试的方式快速掌握用法:
2.2 示例
使用很简单,建议直接进入 JunitPerfConfig 直接中看注释即可明白每个属性的含义。
希望大家平时学习新技术时,也可以尝试通过这种方式,快速了解用法。
/**
* 执行接口
* 对于每一个测试方法的条件配置
* @author bbhou
* @version 1.0.0
* @since 1.0.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Documented
@API(status = API.Status.MAINTAINED, since = VersionConstant.V2_0_0)
@ExtendWith(PerfConfigProvider.class)
@TestTemplate
public @interface JunitPerfConfig {
/**
* 执行时使用多少线程执行
* @return int val
*/
int threads() default 1;
/**
* 准备时间(单位:毫秒)
* @return time in mills
*/
long warmUp() default 0L;
/**
* 执行时间。(单位:毫秒)
* 默认值:默认为 1min
* 这里的执行时间不包含准备时间。
* @return time in mills
*/
long duration() default 60_000L;
/**
* 存放统计信息工具
* @return 统计实现类
*/
Class<? extends StatisticsCalculator> statistics() default DefaultStatisticsCalculator.class;
/**
* 存放报告信息类
* @return 报告信息
*/
Class<? extends Reporter>[] reporter() default {ConsoleReporter.class};
}
因此随手写个示例:
import com.github.houbb.junitperf.core.annotation.JunitPerfConfig;
import com.github.houbb.junitperf.core.report.impl.ConsoleReporter;
import com.github.houbb.junitperf.core.report.impl.HtmlReporter;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class PerfTest {
@JunitPerfConfig(threads = 10, warmUp = 1_000, duration = 30_000
, reporter = {HtmlReporter.class, ConsoleReporter.class})
public void newStrTestStringBuilder() {
StringBuilder stringBuilder = new StringBuilder("demo");
for (int i = 0; i < 100; ++i) {
stringBuilder.append(i);
}
log.info(stringBuilder.toString());
}
}
通过 reporter 可以配置 HTML 方式和 控制台方式的报告,下图为 HTML 方式(在 target 目录的 junitperf 文件夹对应的包名下):
三、总结
该框架虽然在国内不是特别出名,但是非常简单易用,对于要求不高的朋友来说已经非常不错了。
掌握学习的能力,快速上手一个新技术的能力非常重要,希望本文能够给你带来一些启发。
更多详细内容参见 github 项目说明,更多高级用法可以下载源码去看下单元测试,也可以根据源码自行探索。
热门评论
不错不错,写的挺明白的!