轻量级接口性能测试工具ContiPerf

上一篇 / 下一篇  2016-02-25 11:04:48 / 个人分类:性能测试

ContiPerf是一个轻量级的测试工具,基于JUnit 4 开发,可用于接口级的性能测试,快速压测。
1、ContiPerf介绍
可以指定在线程数量和执行次数,通过限制最大时间和平均执行时间来进行效率测试,一个简单的例子如下:
1
2
3
4
5
6
7
8
9
10
11
publicclassContiPerfTest { 
    @Rule 
    publicContiPerfRule i = newContiPerfRule(); 
   
    @Test 
    @PerfTest(invocations = 1000, threads = 40
    @Required(max = 1200, average = 250, totalTime = 60000
    publicvoidtest1() throwsException { 
        Thread.sleep(200); 
    
}
使用@Rule注释激活ContiPerf,通过@Test指定测试方法,@PerfTest指定调用次数和线程数量,@Required指定性能要求(每次执行的最长时间,平均时间,总时间等)。
也可以通过对类指定@PerfTest和@Required,表示类中方法的默认设置,如下:

@PerfTest(invocations = 1000, threads = 40) 
@Required(max = 1200, average = 250, totalTime = 60000) 
public class ContiPerfTest { 
    @Rule 
    public ContiPerfRule i = new ContiPerfRule(); 
   
    @Test 
    public void test1() throws Exception { 
        Thread.sleep(200); 
    } 
}

2、在maven中使用ContiPerf
配置方式如下:
<dependencies> 
    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.7</version> 
        <scope>test</scope> 
    </dependency>  
    <dependency> 
        <groupId>org.databene</groupId> 
        <artifactId>contiperf</artifactId> 
        <version>2.1.0</version> 
        <scope>test</scope> 
    </dependency> 
</dependencies>

3、主要参数介绍
1)PerfTest参数
@PerfTest(invocations = 300):执行300次,和线程数量无关,默认值为1,表示执行1次;
@PerfTest(threads=30):并发执行30个线程,默认值为1个线程;
@PerfTest(duration = 20000):重复地执行测试至少执行20s。

三个属性可以组合使用,其中Threads必须和其他两个属性组合才能生效。当Invocations和Duration都有指定时,以执行次数多的为准。

  例,@PerfTest(invocations = 300, threads = 2, duration = 100),如果执行方法300次的时候执行时间还没到100ms,则继续执行到满足执行时间等于100ms,如果执行到50次的时候已经100ms了,则会继续执行之100次。

  如果你不想让测试连续不间断的跑完,可以通过注释设置等待时间,例,@PerfTest(invocations = 1000, threads = 10, timer = RandomTimer.class, timerParams = { 30, 80 }) ,每执行完一次会等待30~80ms然后才会执行下一次调用。

  在开多线程进行并发压测的时候,如果一下子达到最大进程数有些系统可能会受不了,ContiPerf还提供了“预热”功能,例,@PerfTest(threads = 10, duration = 60000, rampUp = 1000) ,启动时会先起一个线程,然后每个1000ms起一线程,到9000ms时10个线程同时执行,那么这个测试实际执行了69s,如果只想衡量全力压测的结果,那么可以在注释中加入warmUp,即@PerfTest(threads = 10, duration = 60000, rampUp = 1000, warmUp = 9000) ,那么统计结果的时候会去掉预热的9s。

2)Required参数
@Required(throughput = 20):要求每秒至少执行20个测试;
@Required(average = 50):要求平均执行时间不超过50ms;
@Required(median = 45):要求所有执行的50%不超过45ms; 
@Required(max = 2000):要求没有测试超过2s;
@Required(totalTime = 5000):要求总的执行时间不超过5s;
@Required(percentile90 = 3000):要求90%的测试不超过3s;
@Required(percentile95 = 5000):要求95%的测试不超过5s; 
@Required(percentile99 = 10000):要求99%的测试不超过10s; 
@Required(percentiles = "66:200,96:500"):要求66%的测试不超过200ms,96%的测试不超过500ms。
4、测试结果展示

TAG: 接口

 

评分:0

我来说两句