项目名称:性能测试框架
一、项目背景:
写在前面,此项目是用于测试方法性能的小框架;
写这个小项目的初衷是我在学习运用的过程中发现,很多时候,实现同种功能的方法并不是单一的,每当这种情况出现的时候,我就会纠结于到底哪一种方法更加高效?最终只能是依靠理论去进行判断。
当然,有时候也会进行一些测试,但在过程中容易因为影响因素考虑不全面,而使得测试过程的科学性无法保证,最终得出的测试结果也会有一定程度的误差。在了解到Java有自己的基准测试框架后,我也进行了基础的学习和运用,发现这个测试框架做出的测试结果与理论的贴合度很高,于是决定自己写一个测试框架,实现JMH的一小部分功能,也可以在这个过程中检验自己这段时间学习的成果,将理论知识付诸于实践。
二、实现功能:
1、针对待测方法的运行时间做测试,从而反映该方法的性能;
2、实现了自动加载所有的待测实例,只需要将待测类放入测试用例包中,并实现Case接口,表明该类是测试用类;
3、通过注解,可以由测试者决定测试的组数和每组测试的次数;
4、测试者可通过注解添加预热方法,在测试之前进行预热,减小误差;
5、会将同一个待测类中的所有待测方法的测试结果生成在同一分测试报告中,便于比较;
三、项目结构:
四、代码链接:https://github.com/Arivan7586/Items/tree/master/benchMark
五、项目效果:
1、测试条件:
对由100000 个 值为0到100000的随机整数组成的数组,分别使用递归法快速排序、归并排序以及系统的Arrays.sort()进行排序,测出这三个方法的性能(此处指排序耗时)差异。每个方式测试五组,每组测试10次。
归并排序第一组测试结果
系统Arrays.sort() 第一组测试结果
递归快速排序第一组测试结果
2、两次测试的报告:
3、测试结论:
经过多次测试,可得出:在100000个随即数据的排序中,系统的Arrays.sort() 是性能最高的,递归快速排序与归并排序的性能相差不大;
六、使用到的知识:
1、性能测试
2、反射的使用
3、注解的使用
4、类加载器的使用
七、项目总结
1、该测试框架基本实现了较为科学和准确的测试性能,目前可以实现自用,但与JMH等著名性能框架还有不小的差距,需要我不断努力改进。
2、本项目所实现的测试方法大体完成了做这个项目的初衷,但在变量控制、代码简洁程度、测试报告的精细度方面还有一些缺陷,因此还需要进一步的优化。