首先呢,要提一下的是JMH(Java Microbenchmark Harness)的基准测试框架,JMH用于各种类型的microbenchmark——每个测试从纳秒到毫秒。它关注所有可测量的逻辑,测试人员只需编写测试方法的任务代码。
我的这个项目呢,是参照JMH这个框架,用于测试系统在特定负载的情况下,相应时间和稳定性的表现情况
实现的功能:
- 通过 Case 接口来标注待测试类
- 通过 Benchmark 注解来标注待测试方法
- 通过 Measurement 注解来指定测试配置
- 通过WarmUp注解来指定预热次数(默认为0)
- 通过简单的类加载机制,实现可以待测试类的自动发现
项目进行时:
1.通过@Measurement来实现配置
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface Measurement {
//一组实验调用多少次方法
int iterations();
//一共进行多少组使用
int group();
}
2.通过 Benchmark 注解来标注一下那些是要测试的方法
因此实际上这个注解的内容为空
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Benchmark {
}
3.通过 Case 接口来标注待测试类
public interface Case {
}
4.通过WarmUp这个注解来标注预热的次数
public @interface WarmUp {
//预热次数默认为0次
int iterations() default 0;
}
5.待测试类的加载
- 根据一个固定的类,找到类的加载器
- 根据类加载器找的类文件的路径
- 扫描该路径下的所有类文件
- 利用Case这个接口,找到待测试的类
class CaseRunner{
//默认的配置参数
private static final int DEFAULT_ITERATIONS =