1.服务器为什么会挂掉?
(1)需求分析没到位;
(2)关键时间并发大,并发大造成的结果是系统负载高;
(3)系统架构不具备扩展性,最后造成的结果是宕机。
2.什么时候需要做性能测试?
选型、验收、备份、省钱
3.性能测试的发展方向:平民化、开源化、专业化
4.性能测试概念
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件下来对系统的各项指标进行测试
5.在产品开发周期的哪个阶段做性能测试?
先做性能规划,功能测试通过后;技术选型阶段
6.性能测试分类:
基准测试:先测一轮作为后面测试或者后面版本的基准。
性能测试:基于用户行为情况和用户分布等信息,对系统能否达到预期服务能力进行验证。
并发测试:是测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他问题,所以几乎所有的性能测试都会涉及一些并发测试。
负载测试:通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
压力测试:压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
容量测试:容量测试是在一定的软硬件条件下,在数据库中构造不同数量级的记录数量,通过运行一种或者多种业务场景,在一定虚拟用户数量的情况下,获取不同数量级别的。
疲劳强度测试:测试系统出现疲劳时候的点(可以是时间,也可以是并发量等等)。主要针对的是软件,就是找到系统逐渐变慢的一个临界点。
稳定性测试:测试系统是否稳定,是不是长时间运行的时候有内存泄漏的情况。
失效恢复测试:失效恢复测试一般是对具有负载均衡的系统当中或者是具有备份的系统当中进行的,主要是为了测试当系统局部发生故障时,是否会对全局产生打的影响,产生的影响是否在可以接受的范围内,以及用户能否继续使用系统。
现网性能测试:在真实环境上做性能测试(为了得出最真实的数据,这种类型测试要注意对网络性能的影响,比如占用过多的宽带,影响其他业务,垃圾数据的清理等)。
7.性能测试流程
(1)需求分析
产品规格:产品经理告诉你要做一个什么功能
用户模型:用户喜欢用哪些功能、哪个时间段用、大概有多少用户来使用。从产品经理、业务经理、运营人员、功能测试人员或者熟悉产品的人获取。
系统数据:基础数据和业务数据。
为什么要考虑系统数据:性能测试需要大量的数据,数据少了,和数据相关的性能问题可能测不 准。造数据的原则:宁多勿少。
系统架构:系统中有多少模块,模块之间怎么调用,找架构师或者开发了解相关知识。
Web系统:浏览器--Nginx--Tomcat--Redis--MySQL
运维日志:进一步确认真实用户的数据和行为。
运营数据:不同时间点、不同功能的使用情况,PV图统计,从运营(运维)人员获取。
市场计划:帮助我们考虑系统性能的扩展性。促销活动,从产品经理、业务经理了解。
项目管理计划:帮助我们明确测试点的优先级。获取性能测试的重点、性能开始测试和截止时间,从项目经理、测试管理人员获取。
加工处理
性格测试方案
测试范围、测试重点、测试难点、风险(时间不够、需求估算不准确、先下线上配置差异太大)。
准入准出标准。
脚本规范。
产出:
需求分析文档
面试题:性能测试的重点和难点:需求分析、诊断和调优。
(2)方案设计
测试方案和测试有什么区别?
需求是源头,方案是关键。
压测环境:线下还是线上
工具选择:Ir/jmeter/locust/gating
场景选择:单场景还是复杂场景
(3)测试计划
什么时候、什么人、做什么事、什么时间完成
完整版:项目背景、风险说明、风险应对方案等,通常会用word来一个性能测试计划文档。
精简版:project,事情-谁做-时间
(4)脚本编写
先了解系统:接口、功能、彼此间的依赖关系,再写脚本
编写脚本常见问题:没有注释;写完后没有在场景中跑,直接压测,脚本跑起来就各种报错。
(5)环境搭建
搭建环境需要多少资源
线下环境如何模拟线上环境:
能在线上做就在线上做,线上做分两种情况:
a、系统没有给用户使用,可以直接在线上测(新系统、没有真实用户)
b、全链路压测(已经上线的系统,有真实用户)
搭建测试环境:测试出测试机器的扩展系数。
注意:差异过大,不要做
全链路压测可能的问题:
a、压测的时候会不会影响线上数据库。
b、系统比较复杂,协调多个团队。
c、日志统计影响
全链路压测通用思路:
a、压测流量要做标识
b、所有的web服务器、应用服务器、缓存服务器、数据库服务器都要能识别出压测流量和正常流量的能力。
c、要在所有存储和落地的数据中mysql、redis、rocketmq中都要有一个影子库或影子表或缓存区域去存储这些压测的流量。
(6)数据准备
准备多少数据,需求分析得出的结果。
怎么准备
(7)执行测试:设置好场景,把数据跑出来
(8)收集监控数据:监控就是为了收集数据,为后面的分析和调优做准备。
(9)分析调优:
(10)编写性能测试报告
什么人,看什么数据,有讲究的。
8.性能测试指标
(1)用户数:
并发用户数:同一时刻同时做什么事情的用户数。
在线用户数:某个时段在线的用户数。
注册用户数:从开始到当前一共注册过该系统的用户数。
并发用户数是用来压测的;注册用户数是用于造基础数据提供依据的,当然,这个可能还不够,实际造的基础数据可能更多。
(2)响应时间:用户开始访问系统到用户收到的这段时间成为响应时间。
响应时间=网络传输(请求)时间+服务器时间(一层或多层)时间+网络传输(响应)时间+页面前端解析渲染时间
对外说响应时间是多少时,要说明是在多少TPS下的。
TPS:是指服务端每秒处理的事务数。用来衡量系统处理业务的能力,根据实际需要增加。
(3)吞吐量:用于反应客户端和服务器之间网络状态的一个指标,其能间接反映服务器承受的系统压力。
吞吐量是衡量网络性能的实际指标(带宽是实际指标)。
(4)思考时间:模拟真实用户数操作而停顿的时间间隔;思考时间会影响系统的TPS。
(5)资源利用率:cpu、内存、网络、IO
不同视角下的性能指标:
a、用户视角:TPS、响应时间
b、开发视角:代码能跑多快
c、运维视角:cpu、内存、网络、IO
d、测试视角:上述全部
拐点模型
随着压力的增大,响应时间会逐渐增大。
随着压力的增大,资源利用率先是逐渐增大,然后会维持在一个饱和的状态。
随着压力的增大,吞吐量先是逐渐增大,然后会维持在一直较高水平,然后吞吐是会下降。
前端性能测试
前端在线测试工具:https://gtmetrix.com/ 注册账号,并登录。
前端性能优化:
减少http请求;减少请求元素的大小;其他的。
新系统和老系统性能需求分析的区别:
老系统:
产品规格:
业务模式:
系统架构:
市场计划:
运营数据:
项目管理计划:
新系统:
产品规格:
业务模式:
系统架构:
市场计划:
运营数据:市场上有类似的产品,以业务现有产品数据做参数,业务没有类似的产品。找产品经理和业务经理了解预期值。
项目管理计划:
面试题:系统能支持多少用户并发?
主流性能测试工具:
loadrunner:收费,不开放源码,大小有4g
jmeter:纯Java开发,开源,GUI
locust:
gatling:
2.线程组的介绍:
线程组是一个元件,线程组是加在测试计划下的,是任何一个测试计划的开始点。在一个测试计划中的所有取样器都必须在某个线程组下。所有的任务都是基于线程组。所以,测试计划下至少要有一个线程组。一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。