测试实战总结,性能测试-秒杀系统实战与优化,彻底打通性能测试...

news/2025/1/16 2:55:21/

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

对于大并发量的系统,有几个可能需要优化的点,下面我们要一步步测试来优化这个系统。

1、测试目标
对于一个系统,几个常用的评价指标是:平均响应时间、吞吐率、qps等。下面测试主要测试3个接口

主页(访问根路径,没有数据库交互)
秒杀接口暴露(暴露秒杀接口,有后台数据交互)
执行秒杀操作(插入秒杀成功记录和减库存一个完整的事务操作)
对于这三个接口,我们主要的测试目标和优化目标是平均响应时间,当然这是建立在数据正确返回的基础上的,失败率太高那这个平均响应时间是没有意义的。
这里的优化侧重于后端数据库和内存方面的优化。

2、测试环境
在Windows10下用 Jmeter来进行负载测试和压力测试,其他环境如下,涉及具体配置再提。
Tomcat8.0.38;
Jdk1.8 hotspot vm;
Mysql 5.7;
Redis 2.7.3;

3、测试过程
首先进行主页测试,我们访问tomcat的主页,使用jmeter的线程组中的线程数模拟用户数,不断增加线程数对主页进行性能测试。

我们将结果数据写到一个xml文件中。首先我们模拟5000个用户同时请求主页。

5000个用户同时请求主页
设置循环次数为2,即一共有10000个请求将被发送。

请添加图片描述

从响应的结果可以看到,没有错误数,这10000个请求全部返回成功了,只是有的请求慢有的请求快。平均的响应时间在300ms, 50%的请求的响应时间平均为87ms。到后面越来越多的请求开始等待,这里可以想到的优化的点在于tomcat的线程池中线程的数量,越来越多的请求在等待队列中。

查看tomcat的配置后发现最大线程数为maxThreads=”150”,好那我们用150个线程,循环10次,也就是一共1500个请求,那结果会是什么样呢?

请添加图片描述

平均相应时间为5ms,前50%的请求的平均响应时间为1ms。
但是这里并不能直接修改tomcat的最大线程数来优化。复杂点说就是这是一个复杂的东西,线程数越大,你也要有相应的cpu来执行啊。

把tomcat的线程数设置为500,然后起5000个线程发送10000个请求,然后得到了:

请添加图片描述

比之前的更差了。无论是平均相应时间还是错误率。简单粗暴的去改线程数是不可行的。这里我们不去管tomcat的线程数或者是其他层面的优化,我们只专注于后端数据库层面的优化。

500个用户同时请求暴露秒杀接口
为什么用500个,是为了减少因为tomcat请求等待带来的数据误差。

直接向MySQL请求数据
先模拟500个用户,每个用户发送10次请求。该请求相应的操作为根据id向数据库查询一条记录。得到了这样的数据。

请添加图片描述

期间打开windows的性能监控器,发现磁盘IO有变化,IO百分比最高的时候也不超过15%。
这样的操作,错误率为0,相当稳定,平均响应时间为1406ms。

模拟5000个用户每个用户发送一次请求

请添加图片描述

磁盘的IO百分比一度达到了100%。从数据的绝对值来看,这样的测试没有意义了,因为瓶颈不在MySQL,瓶颈是tomcat的连接池最大线程数为maxThreads=”150” 越来越多的请求在等待队列中,因为我们前面分析过的tomcat。但是数据的相对值是有意义的。

4、使用redis缓存数据
还是模拟500个用户,每个用户发送10次请求。

请添加图片描述

响应速度显著提高,注意一个值,Min=1,有些请求几乎不足1ms,因为redis直接从内存读取数值,非常快。如果不是tomcat的请求在排队,平均响应时间是个位数。

Redis下模拟5000个用户,每个用户发送一次请求。会是什么结果呢?

请添加图片描述

可以看到:模拟5000个用户比模拟500个用户的响应时间要慢很多,平均响应时间大概是8倍

使用150个线程,循环100次,即发送15000次请求

得到:

请添加图片描述

可以看到,150个用户的话这种响应速度是比较快的,因此可以初步断定:响应的瓶颈在于tomcat的请求排队等待。

这个优化的过程感觉就是无止尽的。
比如,内存回收那一块。选用合适的垃圾收集器,尽可能地减少GC时stop the world的时间和次数显然对于一个秒杀系统来说是非常对的优化方向。这里尝试用过几款垃圾收集器比如parNew,G1来对比他们的平均响应时间,但是多次测试后没有明显的差距。

有两个原因,一是这个接口没有产生太多的大对象,二是这个优化并不太明显。后面有机会的话还是希望继续在内存方面进行优化。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有拼尽全力,你才能成为最好的自己;只有不畏困难,你才能达到心中理想。不要害怕失败,因为每一次跌倒,都是迎接成功的必经之路。所以,勇敢地向前迈进吧,未来等待着你的精彩表现!

岁月悠长,时间宝贵。珍惜每一分每一秒,去追寻自己的目标。不要怕困难,不要怕失败,只有坚持不懈的努力才能实现自己的梦想。把握今天,创造未来,奋斗出属于自己的精彩人生!

不断挑战自己的极限,超越自我,不畏艰难险阻,才能实现自己的人生价值。让每个日出都是新的起点,每个夜晚都是成长的见证。相信自己,你一定能达到更远的目标!


http://www.ppmy.cn/news/489127.html

相关文章

ESP32(MicroPthon) 动画:方块反弹

ESP32(MicroPython) 动画:方块反弹 本程序生成方块后滚动显示,使方块斜向移动,并记录方块当前坐标和上一个坐标。根据当前坐标判断方块移动到屏幕边缘后根据上一个坐标与当前坐标的差得出方块的移动方向,并…

办公室各种办公用品集锦

本及纸制品: 笔记本、螺旋本、活页本、硬皮本、皮面本、仿皮本、记事本、拍纸本、商务日志、万用手册 信封、信纸、题名册、签到薄、其它 办公事务机器: 计算器、打孔机、打孔器、封箱器、考勤机、装订机、塑封机、裁纸机、覆膜机、考勤卡、标签打印机、标签色带、装订封皮、…

如何开好图文打印店

曾几何时,打字复印店布满城市的大街小巷,风光一时。但随着打印机和复印机的普及,许多单位,甚至个人都购置了这些设备,于是普通的打字复印店已是明日黄花,大多都是在惨淡经营,低端市场的打字复印…

VBA解析JSON数据(6)-- 解析复杂JSON

JSON数据结构中Array和Object可以相互嵌套,如下图所示,body是一个Array,其中的元素为Object([0], [1], [2] … ),对象[0]中即包含普通的键值对c:"商品",也包含Object p(其…

在谷歌搜索中胜出的视频缩略图

你有没有注意到,越来越多的视频结果显示在谷歌搜索结果?我到处转,似乎谷歌提供视频的选项,我看在其搜索结果的第一页。作为一个用户,我很欣赏视频内容,往往会点击视频结果。作为一个营销人员,我…

p1口实验_威海2SK-P1两级水环式真空泵及压缩机多少钱

威海2SK-P1两级水环式真空泵及压缩机多少钱 zbyszk 威海2SK-P1两级水环式真空泵及压缩机多少钱 那么,不锈钢水箱的使用效果会受哪些基本的因素影响呢。XD型旋片式真空泵工作环境温度和气体温度应在5℃~40℃之间。XD型旋片式真空泵不能抽除水或其它液体。不能抽除易爆…

康瞳的两大功效(康瞳的功效)给大家分享个如何更好的使用康瞳提高视力

康瞳的两大功效(康瞳的功效)给大家分享个如何更好的使用康瞳提高视力 康瞳的两大功效(康瞳的功效)

【编程语言 · C语言 · 函数和数组】

具有数组参数的函数 数组不能通过值传递给函数。但是,数组名是一个指针,因此仅将数组名传递给函数就是将指针传递给数组。 例如: int add_up (int *a, int num_elements);int main() {int orders[5] {100, 220, 37, 16, 98};printf("Total orde…