基于Java的性能测试框架

心路历程
这个项目的灵感是来自一款叫做 JMH 的基准测试框架(后续有资料说明)。
是为了更好的回答实现了同样功能的函数,哪些操作更高效,指导我们更好的了解优化我们的程序。
在这个过程中也很好的学习了关于影响到程序尤其是 java 程序执行的一些因素。
项目背景
什么是性能测试
系统在特定负载的情况下,响应时间和稳定性的表现情况。
几个关键词:

  1. 系统
    这也就是我们自己开发的程序。
    为什么我们研发的同学也得关注这个测试的东西,就是因为这些指标反应出我们开发程序的质量好坏。
    这里我先设想这个系统指的不是软件系统,而是生活中的一项实体系统,比如一家银行,提供存、取钱的服
    务。
  2. 负载
    单位时间内客户请求的数量。
    对于银行来说,比如一个小时中过来的人数。
    之所以定义中强调是特定负载,就是因为来的人数不同,银行处理的速度一定是不同的。
  3. 响应时间
    客户从发起请求到接收到成功(或者失败)响应的时间。
    对于银行来说,假如我是客户,就是从我出门算起,到存了钱,再回到家摊床上的时间。
    这里是包含我在路上耗费的时间的,因为银行离我家的远近其实很影响最终时间的,如果一家银行只有一个
    网点,设置在美国,即使他的工作人员处理业务再快,对于我们来说也算不上得到很好的服务了,所以站在
    银行的角度,需要考虑这个。
    对我们软件系统来说,通信本身也会耗时。
  4. 稳定性
    是指任意时间,响应时间的波动情况,只有波动越小的系统,还是好系统。
    聊点小的
    刚才提到的基本已经是成熟的系统了,那对于我们现阶段,性能测试有意义么?
    答案仍旧是有的,这里就来一个很简单的例子。
    我们一直说对于字符串来说,相加运算的性能是低于使用 StringBuilder 的,但这个是不是只是理论上的推断?做
    为一名合格的工程师来说,我们除了要具备丰富的理论知识,还要有深刻的数据实验意识,不做个性能测试,谁有
    一定能保证呢?
    所以我需要进行性能测试,以辅助我们的推断。

下面我们针对这个性能测试为目标,逐步完善我们的代码,最后达到一个简易的性能测试框架的水准。整个过程中
我们的灵感都是参照 JMH。
整个阶段,我们重点学习或者用到的是以下知识

  • 性能测试
  • 注解的使用
  • 反射的使用

5大概讲解
Java 语言中用来实现代码级别的配置最好的方式就是使用注解了。我们引入一个 Measurement 的注解,用于在待测试的方法上,指定自己需要进行的测试配置,这里我们通过 java 的反射功能来做到这一点。 定义 Measurement 注解,并且指定为可以修饰的类型是方法,注解保留到运行时,方便我们在运行时读取配置。修改测试类,添加注解。修改 main 方法,添加运行时的注解获取,并且获取相应配置。然后运行它并比较它们之间的性能即可。
代码:https://github.com/CassieCH/Benchmark

你可能感兴趣的:(基于Java的性能测试框架)