目录

  • 简介
  • 使用
  • 引入jar包
  • 测试用例
  • PerfTest参数说明
  • Required参数说明
  • 名词解释:TP90
  • 报告查看
  • 指标

1. 简介

ContiPerf 是一个轻量级的测试工具,基于JUnit 4 开发。可以指定在线程数量和执行次数,通过限制最大时间和平均执行时间来进行性能测试,并且可以生成report,帮助做性能分析。

2. 使用

2.1 引入jar包

maven
<!-- 性能测试 -->
<dependency>
    <groupId>org.databene</groupId>
    <artifactId>contiperf</artifactId>
    <version>2.3.4</version>
    <scope>test</scope>
</dependency>

gradle
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.databene:contiperf:2.3.4')

2.2 测试用例

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductReceiveOrderServiceImplTest {
    @Autowired
    private IProductReceiveOrderService productReceiveOrderService;
    //激活ContiPerf
    @Rule
    public ContiPerfRule i = new ContiPerfRule();
    @Test
    //指定调用次数/线程数
    @PerfTest(threads = 20,invocations=30000)
    //指定每次执行的最长时间/平均时间/总时间
    @Required(max = 1200, average = 250, totalTime = 60000) 
    public void testQueryOrder(){
        System.out.println("begin ...");
        productReceiveOrderService.init("name");
    }
}

2.3 PerfTest参数说明

参数说明
@PerfTest(invocations = 300)执行300次,和线程数量无关,默认值为1,表示执行1次
@PerfTest(threads=30)并发执行30个线程,默认值为1个线程
@PerfTest(duration = 20000)重复地执行测试至少执行20s

2.4 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

2.5 名词解释:TP90

指在一个时间段内(如5分钟),统计该方法每次调用所消耗的时间,并将这些时间按从小到大的顺序进行排序,取第90%的那个值作为TP90 值;配置此监控指标对应的报警阀值后,需要保证在这个时间段内该方法所有调用的消耗时间至少有90%的值要小于此阀值,否则系统将会报警

3. 报告查看

在junit执行完毕,会在target/contiperf-report中有相关的执行结果,可以使用浏览器打开查看

3.1 指标

指标说明
Execution time执行总时间
Total invocations总请求数
Throughput每秒效率 TPS
Min. latency最短响应时间
Average latency平均响应时间
MedianTP50响应时间
90%TP90响应时间
Max latency最长响应时间

Q.E.D.