性能测试(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、Locust 是Python代码级别的性能测试工具,它是基于协程(微小的线程)https://locust.io/
性能测试计划:
1、具体测试场景执行的负责人,和执行的开始结束时间
2、前置工作内容
3、具体使用到的测试技术
测试设计与开发:
编写测试脚本来执行验证具体的测试场景
测试执行与管理,数据收集:
1、在脚本编写的基础上执行以及验证测试场景
2、我们在测试的过程中需要收集数据(性能计数器)
A、服务器系统资源:CPU和Memory
B、DB的资源:IOPS,连接数
C、服务资源:响应时间(最大,最小,平均,中位数(50%),90%,95%,99%),吞吐量,并发数
3、数据收集的思路:把这些数据写到InfluxDB(时序数据库),最后展示在Grafana的平台上
测试分析:
1、结合收集到的数据分析是否和最初制定的性能测试目标吻合,如果达到了目标,输出性能测试的报告
2、如果没有达到目标,那么开发继续调整,优化,测试继续测试
2 性能测试的方法
在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,以及DB的IOPS,和服务器的系统资源(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工具了,打开后控制台不能退出

浙公网安备 33010602011771号