contiperf施压机制初步探索总结
contiperf是一个轻量级性能测试框架,它让用户在基于junit4的接口测试用例上执行性能测试,官网链接如下:http://databene.org/contiperf.html。下面对ContiPerf的实现做一个概要的分析:
1.contiperf扩展自junit,所以可以使用junit的eclipse插件在eclipse中运行;
2.junit4以上,扩展junit通常使用两种方式,一种是继承junit的runner类,junit默认使用的runner是BlockJUnit4ClassRunner,通过在runner中定制运行用例的流程,从而达到改变或者定制运行单元测试用例的目的;另外一种方式是使用junit自带的扩展接口MethodRule,用户只需要实现MethodRule接口,在用户的测试用例中声明这个接口实现的实例,junit在运行的过程中会解析这个接口,使用这个接口中指定的行为来包装测试用例的运行;
3.contiperf使用的是扩展MethodRule的方式;
4.contiperf以ContiPerfRule作为和junit的接入口,junit在执行测试用例过程中读取ContiPerfRule并在执行junit的测试用例之前包装ContiPerf指定的流程。
5.ContiPerf接入的主要流程:解析单元测试用例上的PerfTest注解,剥离级联在单元测试方法调用之上的一些RunBefore和RunAfter(这么做的目的是去除执行性能测试时多余的性能消耗),设置性能测试报告上下文,组装ContiPerf性能测试运行流程;
6.ContiPerf的测试流程:InvocationRunner.run--->根据配置选择具体压测Runner--->ConcurrentRunner||TimedRunner||CountRunner.run-->JunitInvoker调用junit的单元测试用例。
7.上一点中,TimeRunner实现了调用目标用例指定时间的实现;CountRunner实现了调用目标用例指定次数的实现;ConcurrentRunner则实现了多线程并发对TimeRunner或者CountRunner的调用,ConcurrentRunner会启动配置指定的线程数调用TimeRunner或者CountRunner;执行时间的配置优于执行次数。
补充:综合编程 , 其他综合 ,