性能测试(2)理论

1 性能测试模型

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

  •  测试前期准备【目标;场景、数据;资源(人力、机器)】
• 测试工具技术引入【loadrunner;jmeter;locust】
• 性能测试计划 【负责人、开始/结束时间;前置准备;技术】
• 测试设计与开发【编写测试脚本】
• 测试执行与管理,数据收集【执行;收集数据(服务器系统;DB;服务)】
• 测试分析【与目标吻合,生成测试报告】
 

1.2 工作流程的思路为:

1、目标是什么?

2、怎么去做

3、过程中你需要收集数据

4、一定要有结论

 

1.3性能测试具体描述(模型、流程)

测试前期准备工作:

1、梳理清楚性能测试的目标(参考之前的历史数据,性能的目标由测试主导梳理出来,但是是和大家一起沟通决定下来)
2、在目标清楚的基础上,梳理出测试场景,和准备测试数据
3、准备资源人力和机器资源)

测试工具技术引入:

1、LoadRunner  HP公司研发的工具,主要在工业级的性能测试中具备非常大的优势,它是收费的。
2、JMeter Apache基金会顶级项目,是Java语言100%开发的,它是开源的,在头部互联网公司基本都进行二次开发,应用也是非常广泛的 https://jmeter.apache.org/
3、LocustPython代码级别的性能测试工具,它是基于协程(微小的线程)https://locust.io/

性能测试计划:

1、具体测试场景执行的负责人,和执行的开始结束时间
2、前置工作内容
3、具体使用到的测试技术

测试设计与开发:

编写测试脚本执行验证具体的测试场景

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

1、在脚本编写的基础上执行以及验证测试场景
2、我们在测试的过程中需要收集数据(性能计数器)
    A、服务器系统资源:CPU和Memory
    B、DB的资源:IOPS,连接数
    C、服务资源:响应时间(最大,最小,平均,中位数(50%),90%,95%,99%),吞吐量,并发数
3、数据收集的思路:把这些数据写到InfluxDB(时序数据库),最后展示在Grafana的平台

测试分析:

1、结合收集到的数据分析是否和最初制定的性能测试目标吻合,如果达到了目标,输出性能测试的报告
2、如果没有达到目标,那么开发继续调整,优化,测试继续测试
 
场景:针对一码通的系统,需要做并发的测试,目标数据是每秒并发15万,那么需要测:
1、5万        
2、10万
3、15万
4、20万
5、25万
 

2 性能测试的方法

2.1验收负载测试

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

环境:

1、测试环境(QA)

2、预发布环境

3、生产环境(线上)

 

问题: 如果测试好了 ,每次发布到生产环境都有问题,怎么办?

那么就需要增加预发布环境,在预发布环境进行测试,预发布环境就是为了规避这种问题,预发布环境和生产环境是一样的,只是数据库不同。

 

2.2负载测试

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

 

2.3压力测试

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

TimeOut: 超时

OOM(Java.lang.Out Of Memory):内存泄露

OverStackExpection: 堆栈溢出

系统的稳定性:

被测系统在长时间的系统资源饱和的状态下,依然能够很好的处理系统的业务逻辑。比如嘀嘀打车在系统资源饱和的状态下,依然能够正常的接单。

 

2.4配置测试

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

 

2.5并发测试

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

 

2.6可靠性测试

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

 

2.7被测对象

被测对象往往是一个服务,服务一般都会提供接口,那么我们直接访问这个接口可以来测试这个服务。

 
 

3 性能测试相关问题(面试题)

1、怎么区分负载测试与压力测试?

 答:负载测试 通过在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态,找出系统能够达到的最大负载量的测试

压力测试是指系统在一定饱和状态下(负载测试后系统就处于饱和状态),也可以说是在高负载的状态下,如CPU,内存等饱和使用的情况下,系统能够处理的会话能力 以及系统是否会出现错误(比如TimeOut(超时),OOM(内存泄漏),OverStackExpection(堆栈异常))。

也就是说负载测试是不断的对系统增加压力,从而对系统的最大负载量进行的测试。而压力测试 是在强负载的基础上 对系统处理能力的测试,并且检查系统是否会出现超时、内存泄漏等错误。

2、怎么理解系统稳定性测试

 答:压力测试的方式可以反应出系统的稳定性,被测系统在系统资源饱和的状态下,检查应用的性能表现,是否依然能够很好的处理系统的业务逻辑,用来保证系统的稳定运行。比如嘀嘀打车在系统资源饱和的状态下,依然能够正常的接单。

3、如果做性能测试过程中,开发要求增加服务器,此时你会?

答: 在性能测试的过程中,测试环境的资源配置与生产环境的资源必须是一致的。不能同意开发的方案,或者叫上相关的人,对生成环境也增加服务器才行。

4、做性能测试需要准备哪些工作,为什么?

答:主要是测试前期的准备工作和测试技术的引入:

前期准备:

1、梳理清楚性能测试的目标,有了目标就知道怎么做测试,对测试结果有个判定标准。(参考之前的历史数据,性能的目标由测试主导梳理出来,但是是和大家一起沟通决定下来)
2、在目标清楚的基础上,梳理出测试场景,和准备测试数据。
3、准备资源(人力和机器资源)。

测试工具技术引入:

1、LoadRunner  HP公司研发的工具,主要在工业级的性能测试中具备非常大的优势,它是收费的。
2、JMeter Apache基金会顶级项目,是Java语言100%开发的,它是开源的,在头部互联网公司基本都进行二次开发,应用也是非常广泛的 https://jmeter.apache.org/
3、Locust 是Python代码级别的性能测试工具,它是基于协程(微小的线程)https://locust.io/

5、性能测试中测试环境和生产环境的配置必须一样嘛?为什么?

答:进行性能测试时,不同的环境配置测试得到的性能指标可能会有非常大的差别。如果配置不一样就不具备参考价值。

6、做性能测试之前,会参考以往的历史数据,来定性能测试的目标。面试过程中:性能测试你测什么?关注的点是什么?

答:程序的响应时间 ,系统的吞吐量,以及并发用户数,和tps,qps,以及DBIOPS,和服务器的系统资源(CPU和内存)

通过一定的工具或者代码的方式,来验证被测试的程序是否满足性能测试的目标,以及验证程序是否会出现OOM,系统崩溃,系统无响应等情况。

1、阿里云系统资源(CPU和内存)
2、程序的响应时间,和吞吐量,并发用户数
3、数据库的IOPS

7、怎么做性能测试?

答:流程和技术实现两方面来回答。首先,前期准备性能测试的目标,梳理出测试场景和测试需要的数据,准备好人力机器资源;其次,我是使用Jmeter来做性能测试的,通过jmeter来执行任务,通过后端监听器,把资源数据收集到influxdb数据库在grafana平台上展示出来,对数据进行分析,如果达到了目标,则输出性能测试的报告,如果没有达到目标,那么开发继续优化,测试继续测试

 

4 工具:jmeter

https://jmeter.apache.org/download_jmeter.cgi(下载二进制 Binaries)

1.把jmeter的bin目录 搭建到PATH环境变量

 

 2.在cmd 中输入 jmeter -v 出现以下画面,这时就配置好了:

 

 3.在控制台输入jmeter就能打开jmeter工具了,打开后控制台不能退出

 

posted @ 2022-05-19 17:41  jia---  阅读(127)  评论(0)    收藏  举报