性能测试理论


性能测试术语

响应时间

响应时间=网络时间+应用程序处理时间

response time : 一次操作完成的时间,也就是客户端发送请求到服务端后,服务端返回到客户端的响应数据的时间 

3秒以内表现好的 3-5秒中间表现 超过5秒一般性的不能接受 超过响应时间,一般会出现timeout

例如:拉勾网的职位搜索翻页的响应时间

并发用户数

性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统,比如一个游戏,是否可以承受同时在线人数一个亿的人同时进行玩游戏

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

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

性能计数器:

WebServer:HTTP连接数 应用Server:服务被部署的系统的CPU和内存资源 DataServe:IOPS

IOPS

该术语主要是针对数据库的,也就是每秒发生的读写操作的次数,是数据传输的一个度量方法。用于磁盘的读写,IOPS值的是每秒读和写的次数。

TPS/QPS

事务指的是某个操作或者是一组操作的组合,如登录的事务那么就是输入账户和密码,点击登录按钮跳转到登录成 功的?面并且信息都加载出来。

TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。

QPS指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。

吞吐量

主要用于数据传输方面,也就是被测试系统的执行效率。该术语用于描述数据传输速度(字节/秒或者比特/秒),在 某些情况下(如DB层面),吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时间内客户端请求的数量,直接体现系统的性能承载能力。

Throughput----吞吐量即表示每秒完成的请求数

延时

延时是描述操作里用来等待服务的时间,也就是客户端发送请求后,用来等待服务端返回给客户端的响应时间

使用率

对于服务所请求的资源,使用率描述的是所给定的时间区间内资源的繁忙程度,对于存储资源来说,使用率就是所消耗的存储容量,如果使用大量内存,导致内存泄漏(oom),怎么解决?我们可以通过队列来解决,比如做核酸检测排队,先进先出。

队列: 先进先出

饱和度

指的是某一资源无法满足服务的排对工作量,可以结合“线程等待队列”的理论我详细的解释。举一个生活中的例 子,一个停?场最多可以停?是100辆车,那么停满99辆?以及100辆?的时候,这个时候?场的饱和度处于高负载。

资源: 内存和CPU

CPU密集型:应?程序执?繁重的计算,通常运?时间?较?,会占??量的CPU IO密集型:应?程序执?I/O,计算不多,会占??量的内存资源 系统的最?粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。

Out Of Memory(OOM):内存泄露

如?个业务中,会使??量的内存资源,总的内存资源是4G,在?定数据量的情况下执?该业务形态,内存使?率从100M?直占?到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内存使?率最?为75%

性能测试模型

性能测试模型可以理解为性能测试步骤,具体汇总如下:

测试前期准备

测试工具技术引入

  • Loderunner (收费、类c语言、需要序列号、最大模拟用户数是1000)
  • jmeter (java技术栈的,都会进行二次开发,开发成性能测试的平台)
  • locust (python技术栈的)
  • 自己开发工具

性能测试计划

  • 人力
  • 做什么?
  • 什么时候开始?什么时候结束?
  • 使用什么技术?

测试设计与开发

  • 工具/代码如何写?
  • 具体的脚本

测试执行与管理、数据收集

  • 数据库资源--iops
  • linux--cpu、memory
  • nginx--连接数
  • 响应时间、吞吐量等资源

测试分析

性能测试的方法

 验收负载测试

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

 负载测试

在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量。

  压力测试

该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut,OOM,OverStackExpection(堆栈异常)。压力测试的特点:

  • 检查系统在处于压力情况下时应用的性能表现
  • 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上)
  • 这种方式一般用于测试系统的稳定性

  配置测试

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

  并发测试

模拟用户的并发访问,测试多用户并发访问同一个应用时是否存在死锁或者其他的问题,并发测试的特点是:

  • 发现系统中可能隐藏的并发访问的问题
  • 关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用情况
  • 使用的测试工具如profiler等

  可靠性测试

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

  故障演练

  容灾恢复测试  

Jmeter聚合报告参数

Label----每个请求的名称,比如HTTP请求等

#Samples----发给服务器的请求数量

Average----单个请求的平均响应时间

Median----50%请求的响应时间

90%Line----90%请求响应时间

95%Line----95%请求响应时间

99%Line----99%请求的响应时间

Min----最小的响应时间

Max----最大的响应时间

Error%----错误率=错误的请求的数量/请求的总数

Throughput----吞吐量即表示每秒完成的请求数

Received KB/sec----每秒从服务器端接收到的数据量

Sent KB/sec----每秒从客户端发送的请求的数量

把请求地址分离出来用http请求默认值

比用户定义的变量的优点:不用调用

性能测试的流程:

1、分析性能测试的需求

2、梳理性能测试的场景

3、编写性能测试的方案

4、和相关的人一起制定性能测试的目标(测试去主导,但是和相关的人一起来制定)

5、编写性能测试的计划

6、执行具体的性能测试过程,收集性能测试的数据

7、和大家针对性能测试的结果,来再次核对是否达到目标

性能测试需要关注的点:

程序的响应时间

服务器的资源情况

程序的稳定性

客户端也有最大的瓶颈,我们在性能测试的过程中,不要超过我们客户端的最大瓶颈

性能测试的目标是验证在一定的产品目标下,产品的整体程序情况是否能够满足这个具体的目标

性能测试属于稳定性测试

稳定性不仅仅考虑的是满足这个目标,还需要考虑如下几点: 1、是否存在超时情况 2、是否存在服务崩溃的情况(一直持续的发送请求,看服务是否都能够正常的响应)又叫负载测试。