压力测试

  • 轻量级压力测试工具:
  • 添加步骤
    • 使用pom.xml中加入依赖坐标
    • 单元测试类里面使用 @Rule 注解激活 ContiPerf
    • 在具体测试方法上使用 @PerfTest、 @Required
    • 测试类前加@RunWith(SpringRunner.class)
    • 查看结果
  • 优化——加入redis

轻量级压力测试工具:

ContiPerf 是一个轻量级的测试工具,基于JUnit 4 开发,可用于性能测试等。可以指定在线程数量和执行次数,通过限制最大时间和平均执行时间来进行性能测试。

添加步骤

使用pom.xml中加入依赖坐标

注意JUnit要导入4版本的

     <!--增加压力测试支持--><dependency><groupId>org.databene</groupId><artifactId>contiperf</artifactId><version>2.3.4</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/junit/junit 压力测试只支持JUnit4 (org.junit)--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

单元测试类里面使用 @Rule 注解激活 ContiPerf

 @Rulepublic ContiPerfRule i = new ContiPerfRule();

在具体测试方法上使用 @PerfTest、 @Required

@Test@PerfTest(invocations = 9000, threads = 100)@Required(max = 1200, average = 250, totalTime = 60000)public void showTest() {System.out.println(userservice.showUsers(1, 5, "").getList());}

@PerfTes:指定调用次数/线程数
@Required :指定每次执行的最长时间/平均时间/总时间等

invocations 请求次数
threads 线程数
max 每次执行的最长时间
average 平均时间
totalTime 总时间

注:

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

  • 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。

  • @PerfTest @Required 可以加在类上面,表示所有方法的默认配置

测试类前加@RunWith(SpringRunner.class)

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserserviceimpTest {}

查看结果

执行

在测完之后,在本地的target下生成contiperf-report目录,里面有个index.html文件,即为测试结果

可以看到程序执行了9000次,大概耗时27s

优化——加入redis

==如何减少程序并发带来程序执行的影响呢?==可以使用redis,可以参考redis安装和测试
首先,引入redis依赖坐标

     <!--增加了redis的支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

开启redis服务


修改配置文件.properties
(密码没设置所以没写)

#redis连接
spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379

打开RedisDesktopManager

修改端口

类上加注解
要测试的类上再加上@Cacheable

@Cacheable(cacheNames = "showUsers")


耗时17s,在缓存区取数据会比一直往数据库取数据会更快

那么,又有一个问题,如果是做修改,程序取到数据库数据存入缓存,这时候数据库改动,程序取到的未必是正确的数据
我们可以在测试方法前加上

    @Override@Cacheable(key="#userid",cacheNames="getusersbyid")public User getUserById(int userid) {return usermapper.selectByPrimaryKey(userid);}
    @Override@CacheEvict(key="#user.userid",cacheNames="getusersbyid")public boolean updateUsers(User user) {user.setNickname("我是缓存!");return usermapper.updateByPrimaryKey(user) > 0;}

改变了缓存

数据库

再执行一次,可以看到取的仍然是新数据,所以成功

SpringBoot添加压力测试相关推荐

  1. 【40-系统性能压力测试基本概念-相关性能指标HPSTPSQPSRT-安装Jmeter教程-JMeter测试流程-线程组-取样器-监视器-测试商城首页-JMeter Address 占用的问题】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  2. 【高性能】Web性能压力测试JMeter、测试秒杀Red

    高性能问题 内容管理 JMeter web性能测试 JMeter配置原件 取样器 Sampler 配置原件 config Element 逻辑控制器 Logic Controller 前置处理器 Pr ...

  3. Jmeter做接口的压力测试

    章节一压力测试课程介绍 1.2018年亿级流量压测系列之Jmeter4.0课程介绍和效果演示 简介: 讲解课程安排,使用的Jmeter版本 讲课风格:涉及的组件,操作配置多,不会一次性讲解,会先讲部分 ...

  4. 大型网站压力测试及优化方案

    作者:邴越 来自:cnblogs.com/binyue 0 木桶理论应用在系统优化中 木桶理论又称短板理论,其核心思想是一只木桶盛水多少,并不取决于最高的木板,而取决于最短的那块木板. 木桶原理应用在 ...

  5. 使用JMeter压力测试

    一. JMeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域.它可以用于测试静态 ...

  6. 总结之:CentOS6.5 DNS服务BIND配置、正反向解析、主从及压力测试(3)

    DNS服务器的主从复制关系 首先我们要有两台NDS服务器.我这里就启动了两台虚拟机了.要想为域内的DNS服务器必须要在上级获得授权的前提下.添加从服务器的关键的一步:那就是在你主服务器的区域文件中为从 ...

  7. SoapUI实践:自动化测试、压力测试、持续集成

    因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api.下面将研究的成果展示给大家,希望对需要的人有所帮助. SoapUI 是什么? SoapUI 是一个开源测试工具,通过 ...

  8. webbench网络压力测试源码

    今天中午闲来无事花了5分钟时间看了遍webbench网络压力测试的源代码,索性将其汉化,英语水平有限,敬请批评指正. 1.适用系统:Linux 2.编译安装: tar zxvf webbench-1. ...

  9. 比特币Cash Hard Fork辩论在压力测试后重新召开

    在过去的几周里,比特币现金(BCH)社区内对于预定的11月15日硬叉进行了激烈的讨论.BCH开发团队,比特币ABC,Nchain和比特币无限之间就硬分叉即将达成的共识变化存在强烈分歧.本周快进,因为N ...

最新文章

  1. SAP 电商云 Spartacus SSR Optimization Engine 几处 timeout 的执行顺序
  2. 治疗拖延症晚期患者的三张处方
  3. OpenJDK作为Linux上的默认Java
  4. 大数据的相关性和因果性
  5. php检测数组值的长度,php检测数组长度的函数sizeof count_PHP教程
  6. 计算机网络协议到底分几层,一次讲清楚
  7. 海思烧录工具Hitool使用方法
  8. python爬取京东商品_Python爬取京东的商品分类与链接
  9. 计算机应用基础制作新春贺卡图片,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书...
  10. alanwang[GDOU] 简单练习 判断一个年份是否为闰年
  11. 线程池及其原理和使用
  12. u3d 镜面反射的效果
  13. HTML入门学习笔记+详细案例
  14. python jupyter notebook怎么调字体大小_配置Jupyter的代码主题 字体以及字体大小 代码自动补全...
  15. python ppt 图片_python ppt转图片
  16. python弹出框多一个空白框_python – 自定义/删除Django选择框空白选项
  17. 终端连接阿里云服务器出现Permission denied (publickey)解决方法
  18. 高德地图jsapi开发-定位失败
  19. 0到新浪微博综搜榜第一
  20. 解决win7开机黑屏方法

热门文章

  1. Qt5.9/C++架构实例(一个简单的MCV架构应用实例)
  2. 小学四则运算练习软件需求说明
  3. 银行家算法的实验报告
  4. 今天零晨的大雨好厉害呀
  5. 《高效的秘密》第五,六章读后感
  6. 単語境界/非単語境界(¥b, ¥B)
  7. 二进制与十进制转换的简单公式
  8. MacOS强制卸载第三方输入法(搜狗输入法、百度输入法)
  9. 虽然不能去故宫办婚礼,但你可以帮故宫找“中纹”啊!
  10. 金融类APP应该怎么做?券商APP该何去何从?