博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ContiPerf:: 更为优雅和方便的单元压力测试工具。
阅读量:5882 次
发布时间:2019-06-19

本文共 3611 字,大约阅读时间需要 12 分钟。

概述

ContiPerf 是一个轻量级的单元测试工具,基于JUnit 4二次开发,使用它基于注解的方式,快速在本地进行单元压测并提供详细的报告。

Example

1. 新建 SpringBoot 工程

核心依赖如下

org.springframework.boot
spring-boot-starter-test
test
org.databene
contiperf
2.1.0
test
复制代码

2. 测试接口以及实现

package com.wuwenze.contiperf.service;import java.util.List;public interface ContiperfExampleService {    List
findAll();}复制代码
import com.wuwenze.contiperf.service.ContiperfExampleService;import org.springframework.stereotype.Service;import java.util.ArrayList;import java.util.List;import java.util.Random;import lombok.extern.slf4j.Slf4j;@Slf4j@Servicepublic class ContiperfExampleServiceImpl implements ContiperfExampleService {    private final Random RANDOM = new Random();    @Override    public List
findAll() { try { int sleepSecond = RANDOM.nextInt(10); log.info("#findAll(): sleep {} seconds..", sleepSecond); Thread.sleep(sleepSecond * 1000); } catch (InterruptedException e) { // ignore } List
resultList = new ArrayList<>(); for (int i = 0; i < 1000; i++) { resultList.add("string_" + i); } return resultList; }}复制代码

3. 构建单元测试

package com.wuwenze.contiperf.service;import com.wuwenze.contiperf.ContiperfExamplesApplication;import org.databene.contiperf.PerfTest;import org.databene.contiperf.junit.ContiPerfRule;import org.junit.Rule;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTest(classes = ContiperfExamplesApplication.class)public class ContiperfExampleServiceTest {    @Rule    public ContiPerfRule i = new ContiPerfRule();    @Autowired    private ContiperfExampleService contiperfExampleService;    @Test    @PerfTest(threads = 1000, duration = 1500)    public void findAll() {        contiperfExampleService                .findAll()                .forEach(System.out::println);    }}复制代码

4. 最终执行效果

查看测试报告:

总结

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。

3)测试报告

最终的测试报告位于target/contiperf-report/index.html,使用浏览器打开即可。

转载地址:http://kktix.baihongyu.com/

你可能感兴趣的文章
小白经营网站的前前后后
查看>>
Spring MVC 教程,快速入门,深入分析——如何实现全局的异常处理
查看>>
单用户模式修改密码
查看>>
微信小程序帮你赚到第一桶金
查看>>
mac下安卓开发环境搭建
查看>>
学习之华丽的注册按钮➕倒计时
查看>>
Vim 中使用 OmniComplete 为 C/C++ 自动补全(部分增加)
查看>>
初识Hadoop
查看>>
Oracle之内存结构(SGA、PGA)
查看>>
Binary Search Tree IN C
查看>>
jquery之trigger()
查看>>
Spring源码浅析之事务(四)
查看>>
我的友情链接
查看>>
[APM] 2个实例+5个维度解读APM技术
查看>>
Jndi配置数据源
查看>>
华为交换机端口链路类型简析——access、trunk、hybrid
查看>>
[转载] Live Writer 配置写 CSDN、BlogBus、cnBlogs、163、sina 博客
查看>>
2013年SEO集群最新优化工具
查看>>
SQL:连表查询
查看>>
MySQL日期函数、时间函数总结(MySQL 5.X)
查看>>