首页 > 技术文章 > 性能测试理论2

youlideboke 2022-02-15 16:36 原文

1、性能测试模型(步骤)

1.1测试前期准备

(1)梳理测试场景(如测试产品的登录、产品列表、API执行等);

(2)制定测试目标,该目标由测试主导初定,然后和相关人员(开发、架构师、产品、其他测试)达成一致后方可敲定;

(3)设备准备,如服务器等。

1.2测试工具引入

(1)loadrunner:由HP(惠普公司)开发,包含LR、QTP、QC等产品,现已逐渐被淘汰,很少使用了;

(2)jmeter:java语言,一般公司会进行二次开发,形成自己的测试平台;

(3)locust(蝗虫):payth语言,基于协程的;

(4)自己开发工具。

1.3性能测试计划

(1)人力;

(2)做什么;

(3)什么时候开始、什么时候结束;

(4)使用什么技术。

1.4测试设计与开发

(1)工具/代码如何写;

(2)具体的脚本。

1.5测试执行与管理

根据配置的场景执行。

1.6数据收集

(1)数据库资源:主要收集IOPS;

(2)linux:主要收集CPU和memory;

(3)nginx:主要收集连接数;

(4)响应时间(response time)和吞吐量(throughput)等资源。

1.7测试分析

2、性能测试的方法

2.1验收负载测试

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

2.2负载测试

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

统性能的容量

2.3压力测试

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

力测试的特点:

*OOM:内存溢出,查看日志文件,发现在日志文件中会存在java.lang.OutOfMemoryError的错误提示。

(1)检查系统在处于压力情况下时应用的性能表现;

(2)等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上);

(3)这种方式一般用于测试系统的稳定性

2.4配置测试

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

2.5并发测试

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

(1)发现系统中可能隐藏的并发访问的问题;

(2)关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用情况;

(3)使用的测试工具如profiler等。

2.6可靠性测试

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

2.7故障演练

故障演练就是故意的让系统出现一些故障,用来考验相关人员合作处理问题的能力。

2.8容灾恢复测试

故意对程序的数据等做一些破坏,看程序如何自行恢复。

3、jmeter性能测试实战

3.1jmeter执行原理

3.1.1JMeter执行原理

JMerer通过线程组来驱动多个(也可以理解为LR工具里面的虚拟用户)运行测试脚本对目标服务器发起⼤量的网络请求,在每个客户端上可以运行多个线程组,也就是说一个测试计划里面可以包含

N个线程组。线程组里的线程数就是指虚拟用户

 

 

3.2场景设置

在JMeter的测试工具中,依据业务的形态来设置它的目录结果,但是设置性能测试的场景,主要是在线程组中来进行设置。JMeter的线程组可以理解为是建立了⼀个线程池,在执行的过程中处理

线程组里面的各个业务逻辑,线程组的信息具体如下:

 

 

取样器错误后要执行的动作:

(1)继续:如果有⼀个请求错误,其他的请求会继续,不会因为有⼀个请求错误的导致其他请求终止;

(2) 启动下⼀个进程循环:如果请求出现问题,同⼀脚本中的其他请求就都不再执行,直接执行下⼀个进程的信息;如风暴平台,当个人主页的测试用例数断言错误,则会跳过添加产品,继续

执行下一次循环:

 

 

 

 

(3)停止线程 :停止线程指的是如果请求失败,就停止当前线程执行,不再继续执行。如果线程数很多,那么导致的结果是停止的线程就会很多,处于真正运行的线程会很少,最后导致服务器

的负载不够,⼀般不建议勾选该项选项;

(4) 停止测试:如果请求失败,那么停止所有线程执行,也就是说停止整个测试;

(5) 立即停止测试: 如果请求失败,立即停止整个测试场景的执行;

3.3线程属性

3.3.1线程数

⼀个线程可以理解为对应模拟⼀个用户,所以线程数越多,那么也就认为可以模拟的⽤户数越多。

 

 

3.3.2Ramp-Up时间(秒)

该属性指的是所有线程从启动到开始运⾏的时间间隔,单位是秒,也就是说所有线程在多⻓时间内开始执行,如线程数设置50,设置的时间为5秒,则计算的公式为:每秒执行线程数=线数/Ramp-

Up; 具体如:如设置的线程数为50,Ramp-up的时间为10,那么也就是说开启执行后,每秒会启动5个线程,如图:

 

 

如果Ramp-Up设置为0,那么开始执行后,50个线程会⽴刻启动,如图:

 

 

 

如果如果Ramp-Up设置为1,那么开始执行后,每秒启动50个线程,如图:

 

 

3.3.3循环次数

循环次数可以理解为,请求的重复次数。如果选择“永远”,那么请求将⼀直进⾏,不建议这样操作。

3.3.4调度器

所谓调度器可以理解为设置何时开始运⾏。

3.3.5延迟创建线程直到需要

如50个线程数,Ramp-Up时间是10秒,执行后线程是全部就绪的,那么就是每隔1秒启动5个线程数。

 

 

3.3.6持续时间

测试计划持续多长时间。

3.3.7启动延迟

从当前时间延迟多长时间开始运行测试,也就是说点击执行后,仅仅是做初始化的场景,不会执行测试,等待延迟到达后开始运行测试,执行的时间为持续时间设置的时间。

场景:每秒发送15个请求,同时发送45个请求,总的请求数150个。

 *一般最优情况下,持续时间大于10秒就可以。

3.4监听器

3.4.1聚合报告

聚合报告是以表格的形式来显示取样器的结果信息,如果不同的取样器拥有相同的名字,那么在聚合报告会显示在 一行里面,那么⼀般来说,聚合报告都是根据取样器来显示每个取样器的执行结

果信息。聚合报告添加方式如下:

 

 

如:100个请求,每秒执行2个请求,同时并发20个请求,则启动延迟为10秒,如下:

 

 

结果如下:

 

 

聚合报告表格含义:

Label:取样器名称;

Samples:取样器运行次数;

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

Median:50%请求的响应时间;

90%Line:90%请求响应时间;

95%Line:95%请求响应时间;

99%Line:99%请求的响应时间;

Min:请求的最小响应时间;

Max:请求的最⼤响应时间;

Error%:事务错误率;

Throughput:吞吐率,也就是TPS KB/sec:每秒数据包流量;

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

SentKB/sec:每秒从客户端发送的请求的数量。

3.4.2响应时间图

响应时间趋势图反馈的是请求的时间趋势图,添加方式如下:

 

 

如:100个请求,每秒执行2个请求,同时并发20个请求,则启动延迟为10秒,响应时间图结果如下:

 

 

 

推荐阅读