性能测试

1、响应时间

  一次操作完成的时间,也就是客户端发送请求到服务端,服务端返回到客户端的响应数据的时间。包含了用于等待和服务的时间,也包括用来返回结果的时间。响应时间=网络时间+应用程序的处理时间。

2、IOPS

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

3、TPS/QPS

  事务指的是某个操作或者是⼀组操作的组合,如登录的事务那么就是输⼊账户和密码,点击登录按钮跳转到登录成功的⻚⾯并且信息都加载出来。TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。QPS指的是每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。
 
4、吞吐量

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

5、延时
  延时是描述操作⾥⽤来等待服务的时间,也就是客户端发送请求后,⽤来等待服务端返回给客户端的响应时间。当然在某些情况下,它可以指的是整个操作时
间,和响应时间有雷同。当然针对这个延时,可以结合具体的业务形态来说,⽐如OLAP的数据引擎中,延时可以说是SQL在OLAP这⼀层的执⾏延时时间。
 
6、使⽤率
  对于服务所请求的资源,使⽤率描述的是所给定的时间区间内资源的繁忙程度。对于存储资源来说,使⽤率指的就是所消耗的存储容量。如⼀个业务中,会使⽤⼤量的内存资源,总的内存资源是4G,在⼀定数据量的情况下执⾏该业务形态,内存使⽤率从100M⼀直占⽤到3G,然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内存使⽤率最⾼为75%,可能会存在OOM的错误信息,也可能会存在内存泄露的情况。所以使⽤率分两个维度,⼀
个是系统资源的使⽤率,另外⼀个是系统内部署服务对系统资源的使⽤率。
 
7、饱和度
  指的是某⼀资源⽆法满⾜服务的排对⼯作量,可以结合“线程等待队列”的理论我详细的解释。举⼀个⽣活中的例⼦,⼀个停⻋场最多可以停⻋是100辆这,那么停满99辆⻋以及100辆⻋的时候,这个时候⻋场的饱和度处于⾼负载。
 
8、瓶颈
  在系统性能⾥,瓶颈指的是限制系统性能的那个资源。这也是性能测试过程中⾮常核⼼的部分。
 
9、⼯作负载
  系统的输⼊或者是对系统所施加的负载叫作⼯作负载。⽐如对DB来说,⼯作负载就是客户端发出的数据库请求和命令。
 
10、缓存
  ⽤于复制或者缓充⼀定量数据的⾼速存储区域,⽬的是为了避免对较慢的存储层级的直接访问,从⽽提⾼性能。
 
二、性能测试理论
 
1、调度器
  不管是操作系统级别还是在微服务的架构下,⾼并发的请求如果都允许进⼊到执⾏阶段,必然带来的是灾难,因为系统以及集群的计算资源以及可承载的能⼒是有限的。那么就需要调度策略来解决这个事情,解决的思路即使有很多的任务过来,但是先做资源的check检查,在资源允许的情况下,会做任务的下发和执⾏。在操作系统级别,专业的来说,调度器可以理解为:CPU时间划分给活跃的进程和线程,⽽且维护⼀套优先级的机制,这样更重要的⼯作可以更快的执⾏,调度器会跟踪所有ready-to-run状态的进程。调度器(调度策略)可以动态的调优先级以来提升⼯作负载的性能,⼯作负载可以做如下的区分:
  CPU密集型:应⽤程序执⾏繁重的计算,通常运⾏时间⽐较⻓,会占⽤⼤量的CPU
  IO密集型:应⽤程序执⾏I/O,计算不多,会占⽤⼤量的内存资源
系统的最⼩粒度是线程,也就是说系统调度中粒度最细的就是对线程的调度。下⾯具体来看抢占式调度和⾮抢占式的调度策略。
 
2、抢占式调度
  抢占式调度可以理解为在多线程的情况下,各个线程都需要安装操作系统的规则来抢占系统资源的⽅式来获取系统资源的使⽤权。如以竞争⽅式来获取CPU的时间分⽚,时间划分⼀般是⾮常的⼩,所以在这样的情况下,更多感觉是线程的并⾏的⽅式在进⾏,它的调度策略是优先级⾼的线程更加容易获取资源,所以优先级⾼的线程在执⾏效率⽅⾯会有可能提⾼的。
 
3、⾮抢占式调度
  ⾮抢占式调度主要值的是在多线程的情况下,系统对各个线程按照⼀定的排序⽅式分配系统的资源,⽽且系统资源分配到⼀个线程后,就允许该线程⼀直占⽤这个资源直到整个线程任务执⾏结束。但是如果某⼀个线程出现运算⼤或者逻辑存在问题,就会导致其他线程⼀直处于等待中,可能⼤概率的出现死锁。
 
4、并发&并⾏
 
并⾏
  并⾏更多值的是多个线程在并发后,在同⼀个跑道内是并⾏的,⽐如队列⼤⼩是20,那么20个任务是并发执⾏,那么这20个任务也可以理解为是并⾏的。
并发
  指⽤户线程并发执⾏但是不⼀定是并⾏的,在单核的CPU系统中,可能会交替执⾏。在具有多核的CPU或多个CPU的系统中,所有的任务并发执⾏出去后,也会收到操作系统以及调度策略的限制,如Java的程序中,⽤户线程此时可以继续运⾏,⽽垃圾回收线程可以同时运⾏于另⼀个CPU核上,⽤户线程的运⾏和垃圾回收线程的运⾏不会形成⼲扰。
  并发不一定并行。(例马拉松比赛)
三、JMeter性能测试报告
场景设置
  在JMeter的测试⼯具中,依据业务的形态来设置它的⽬录结果,但是设置性能测试的场景,主要是在线程组中来进⾏设置。JMeter的线程组可以理解为是建⽴了⼀个线程池,在执⾏的过程中处理线程组⾥⾯的各个业务逻辑,线程组的信息具体如下:
  取样器错误后要执⾏的动作这部分可以理解为当客户端向服务端发送请求后,以及发送请求的过程中出错后的异常处理⽅式。
继续
  如果有⼀个请求错误,其他的请求会继续,不会因为有⼀个请求错误的导致其他请求终⽌。
启动下⼀个进程循环
  如果请求出现问题,同⼀脚本中的其他请求就都不再执⾏,直接执⾏下⼀个进程的信息。如登录后下⼀个请求是查看个⼈主⻚,但是因为登录出错,下⼀个接⼝查看个⼈主⻚就不会被执⾏。
停⽌线程
  停⽌线程指的是如果请求失败,就停⽌当前线程执⾏,不再继续执⾏。如果线程数很多的,那么导致的结果是停⽌的线程就会很多,处于真正运⾏的线程会很少,最后导致服务器的负载不够,⼀般不建议构选改选项。
停⽌测试
  如果请求失败,那么停⽌所有线程执⾏,也就是说停⽌整个测试。⽴即停⽌测试
  如果请求失败,⽴即停⽌整个测试场景的执⾏。
线程属性
1、线程数
  一个线程可以理解对应模拟一个用户,所以线程数越多,那么也就认为可以模拟的用户数越多
 
2、Ramp-Up时间(秒
  该属性指的是所有线程组从启动到开始运行的时间间隔,单位是秒,也就是说所有线程在多长时间内开始执行,如线程组数设置50,设置的时间为5秒,那么计算的公式为:
每秒执行线程组=线程数/Ramp-Up
  #如设置的线程数为50,Ramp-Up的时间为10,那么也就是说开始执行后,每秒会启动5个线程,如果Ramp-Up设置为0,那么开始执行后,50个线程会立刻启动。
3、循环次数
  循环次数可以理解为:请求的重复次数。如果选择永远,那么请求将一直进行,不建议这样的操作。
4、延迟创建线程直到需要
  如50个线程组,Ramp-Up时间是10秒,执行后线程是全部就绪的,那么就是每个一秒启动5个线程组。
5、调度器
  思维调度器可以理解为设置何时开始运行。
6、持续时间
  测试计划持续多长时间
7、启动延迟
  从当前时间延迟多长时间开始运行测试,也就是说点击执行后,仅仅是做初始化的场景,不会执行测试,等待延迟到达后开始运行测试,执行的时间为持续时间设置的时间。
 三、JMeter监听器
聚合报告
  聚合报告是以表格的形式来显示取样器的结果信息,如果不同的取样器拥有相同的名字,那么在聚合报告会显示在⼀⾏⾥⾯,那么⼀般来说,聚合报告都是根据取样器来显示每个取样器的执⾏结果信息。聚合报告的信息具体如下。

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:每秒从服务器端接收到的数据量
Sent KB/sec:每秒从客户端发送的请求的数量

四、JMeter来操作⽣成html的性能测试报告,具体如下:
1、在JMeter的当前⽬录下,把bin⽬录下的jmeter.properties⽂件中
jmeter.save.saveservice.output_format=csv禁⽤取消.
2、在JMetert的tests下创建性能测试报告,⽂件夹名称为:performanceReport
3、把JMeter设置到path的环境变量
4、执⾏命令,具体命令为:jmeter -n -t script/apiTest.jmx -l APITest.jtl  -e -o performReport/

 

 

posted @ 2021-09-14 15:52  wuyikai  阅读(372)  评论(0编辑  收藏  举报