1 性能测试模型

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

  •  测试前期准备
• 测试工具技术引入
• 性能测试计划
• 测试设计与开发
• 测试执行与管理,数据收集
• 测试分析

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、如果没有达到目标,那么开发继续调整,优化,测试继续测试
场景:针对一码通的系统,需要做并发的测试,目标数据是每秒并发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、618或双11的之前,阿里这边会给出今年的流量比往年的流量是多少量级。面试过程中:性能测试你测什么?关注的点是什么?

答:测程序的响应时间 ,系统的吞吐量,以及并发用户数,和tps,qps,以及DB

IOPS,和服务器的系统资源(CPU和内存)

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

4 工具:jmeter

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

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

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

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