性能测试

什么是软件性能?

         对⼀个产品⽽⾔,性能的及时性是⽤响应时间或者吞吐量来进⾏衡量,⼀个⽤
户操作⾏为,或者说是事务,⽐如单个的事务,响应时间就是完成事务所需要的时间,对⽤户⽽⾔,响应时间就是
端到端的⽤户基本体验。

性能测试方法:

负载测试,压力测试,稳定性测试,并发测试

不同角色对性能的理解

⽤户视⻆
在⽤户的⻆度⽽⾔,软件性能就是⽤户操作的响应时间。⼀般⽽⾔关于响应时间业界的说法具体如下:
1-3秒,属于优的表现
3-5秒,可以接受,属于中间的表现
5秒以上,⽆法接受
运维视⻆
运维除了关注响应时间外,也会关注更多底层的资源信息,这些资源信息具体可以汇总为如下:
系统资源(CPU和内存)
数据库资源(IOPS资源)
JVM内存是否够⽤
系统的最⼤容量
开发视⻆
开发的关注度会更加的全⾯,毕竟代码都是程序员来编写的,具体可以汇总为如下:
前后交互的响应时间
中间件的参数设置
内存释放泄露
连接数泄露
是否存在不合理的内存使⽤⽅式
是否存在不合理的线程同步⽅式
系统中是否存在不合理的资源竞争
系统架构&代码结构
测试视⻆
⽤户关注的视⻆属于全栈性的,需要考虑⽤户视⻆的产品体验,也要监控以及关注运维视⻆和开发视⻆,所以性能
测试中测试的具体⼯作职责可以总结为:
设计合理的场景和测试⽤例来验证系统的资源数据
验证在⾼并发的情况下架构是否满⾜
给架构师以及开发⼈员提供中间件配置参数的合理值范围
使⽤技术⼿段监控系统,DB,中间件,全链路监控的⽅式来监控系统资源情况
⽤户关注的视⻆属于全栈性的,需要考虑⽤户视⻆的产品体验,也要监控以及关注运维视⻆和开发视⻆,所以性能
测试中测试的具体⼯作职责可以总结为:
设计合理的场景和测试⽤例来验证系统的资源数据
验证在⾼并发的情况下架构是否满⾜
给架构师以及开发⼈员提供中间件配置参数的合理值范围
使⽤技术⼿段监控系统,DB,中间件,全链路监控的⽅式来监控系统资源情况
WEB前端
所谓前端的性能⽬前也是性能测试中⽐较热⻔的技术之⼀,关注的点具体汇总为如下:
浏览器的资源加载(HTML解析,图⽚资源加载,CSS⽂件资源加载)
前端缓存技术的优化是否合理性
前端与后端的交互性耗时
 

性能测试常用术语?

nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器

吞吐量

单位时间内成功地传送数据的数量

响应时间(Response Time)=⽹络时间+应⽤程序的处理时间

DNS是域名系统,是把域名解析成ip地址,域名的最终指向是ip地址。(域名相当于手机备忘录里的名字,ip地址相当于电话号码)

 

 

 并发用户数

同一时间段支持多少用户来访问系统

并发用户数:N个用户向服务发送请求
在线用户数:仅仅在线,但是并不代表发送了请求,僵尸用户

 并发用户数秒,可以说:不论从业务视角出发,还是服务端承受压力而言,描述的是同一时间同时向客户端发出请求的客户,某些时候也称为“并发测试”。这中间主要体现的是服务端承受的最大并发访问数。

 性能计数器
WebServer:HTTP连接数
应用Server:服务被部署的系统的CPU和内存资源
DataServe:IOPS
IOPS衡量的是读写的速度

什么是内存溢出,内存泄漏?

内存溢出(outofmemory-oom):指你的应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃,这是一种结果描述。

内存泄漏(Memory leak):指你的应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源,这是一种状态描述。

如⼀个业务中,会使⽤⼤量的内存资源,总的内存资源是4G,在⼀定数据量的情况下执⾏该 业务形态,内存使⽤率从100M⼀直占⽤到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内 存使⽤率最⾼为75%。性能测试的过程中,任何的指标不能超过75%,一旦超过75%,说明可能存在瓶颈。测的就是瓶颈在哪
 使用率:
对于服务所请求的资源,使⽤率描述的是所给定的时间区间内资源的繁忙程度。

思考时间think_time

用户在执行连续操作之间等待的时间。模拟用户思考时间

TPS/QPS   处理事务的术语

事务指的是某个操作或者是⼀组操作的组合,如登录的事务那么就是输⼊账户和密码,点击登录按钮跳转到登录成 功的⻚⾯并且信息都加载出来。
TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。
QPS指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。
 
测试理论:
调度
队列
• CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU
• IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源 系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。

 性能测试怎么做?

https://www.cnblogs.com/imyalost/p/6854479.html#:~:text=%E4%B8%80%E4%B8%AA%E5%AE%8C%E6%95%B4%E7%9A%84%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E6%B5%81%E7%A8%8B%201%201%E3%80%81%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E5%8A%9F%E8%83%BD%E9%AA%8C%E8%AF%81%202%202%E3%80%81%E6%B5%8B%E8%AF%95%E5%9B%A2%E9%98%9F%E7%BB%84%E5%BB%BA%203%203%E3%80%81%E5%B7%A5%E5%85%B7%E7%9A%84%E9%80%89%E6%8B%A9%204,16%201%E3%80%81%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E7%B3%BB%E7%BB%9F%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90%2017%202%E3%80%81%E7%A1%AC%E4%BB%B6%E8%AE%BE%E5%A4%87%E5%AF%B9%E7%B3%BB%E7%BB%9F%E6%80%A7%E8%83%BD%E8%A1%A8%E7%8E%B0%E7%9A%84%E5%BD%B1%E5%93%8D%E5%88%86%E6%9E%90%2018%203%E3%80%81%E5%85%B6%E4%BB%96%E5%BD%B1%E5%93%8D%E5%9B%A0%E7%B4%A0%E5%88%86%E6%9E%90%2019%204%E3%80%81%E6%B5%8B%E8%AF%95%E4%B8%AD%E5%8F%91%E7%8E%B0%E7%9A%84%E9%97%AE%E9%A2%98

性能测试流程:

一,测试  准备工作

1.系统基本功能通过,2,测试团队组建,3,工具的选择,4,业务场景分析

二,测试  计划

分析用户场景,确定系统性能目标。

三,测试  脚本与开发

性能测试中,测试脚本设计与开发占据了很大的时间比重。

1,测试环境,场景,用例设计完      2,脚本

四,测试  执行与管理,数据收集

1、建立测试环境,2、执行测试脚本,3、测试结果记录

收集测试数据,1,数据库资源--QPS,2,linux---cup和memory,  3,nginx---链接数,4,(本身)响应时间,吞吐量

五,测试 分析

性能测试的方法?

验收负载测试(正常业务性能)

 

在QA的环境模拟生产运行的业务压力和使用场景组合,测试系统的性能是否满足生产环境的性能诉求。

 负载测试(找到性能极限)

在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。

核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量。

压力测试(长时间)

该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut,OOM,OverStackExpection(堆栈异常)。压力测试的特点:
• 检查系统在处于压力情况下时应用的性能表现
• 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上)
• 这种方式一般用于测试系统的稳定性

配置测试(最优配置)

被测环境软硬件环境参数的调整,达到最优的分配原则。

并发测试(瞬间)

模拟用户的并发访问,测试多用户并发访问同一个应用时是否存在死锁或者其他的问题,并发测试的特点是:
• 发现系统中可能隐藏的并发访问的问题
• 关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用情况
• 使用的测试工具如profiler等

可靠性测试

给系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件下是否能稳定运行。

 故障演练
容灾恢复测试
 

JMeter性能测试场景设置

线程组参数详解

1. 线程数:虚拟用户数。      一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
2. Ramp-Up Period(in seconds)准备时长:   设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
3. 循环次数每个线程发送请求的次数。     如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
4. 调度器:设置线程组时间

持续时间(秒):测试持续时间,会覆盖结束时间。。。。。。持续时间要大于等于准备时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间。。。。。启动延迟和准备时长是同步的进行的!

性能测试:添加线程组

 

 

 

 

执行完了分析测试报告

 

 

 

 

 聚合报告各个值

 Label:取样器名称
Samples:取样器运⾏次数
Average:单个请求的平均响应时间
Median:50%请求的响应时间
90%Line:90%请求响应时间
95%Line:95%请求响应时间
99%Line:99%请求的响应时间
Min:请求的最⼩响应时间
Max:请求的最⼤响应时间
Std.Dev:响应时间的标准⽅差
Error%:事务错误率
Throughput:吞吐率,也就是TPS
KB/sec:每秒数据包流量
Avg.Bytes:平均数据流量
Received KB/sec:每秒从服务器端接收到的数据量
SentKB/sec:每秒从客户端发送的请求的数量

一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。

后端监听器

 

性能测试如何监控cup和资源的?

要用一个插件和代理

 

下载服务器代理放在jmeter同级目录下

 

然后就可以开启监控插件进行监控,下面是本地服务器监控

 

 如何生成jmeter性能测试报告

先修改配置文件

 

 

把jmeter设置到环境变量,执行生成测试报告的命令

 接下来就可以就打开性能测试报告

 

jvm的资源监控

搭建的java环境jdk自带监控工具

 

监控java应用程序

 

文件上传服务:出现问题的话

打开JVM,获取pid,查看监控,在页面操作文件上传。

文件上传的问题 OOM,timeout,成功——文件是否缺少,成功——文件内容是否乱码,拆分——上传成功后进行合并

 

 

Grafana在线监控平台

 

 

 

posted @ 2022-02-14 16:10  阿建xj  阅读(241)  评论(0)    收藏  举报