第28~34讲 性能测试
第28讲 不同视角下的软件性能和性能指标
终端用户
终端用户是软件的使用者,对软件的使用直接决定了系统的应用前景;
关注指标
系统响应时间:系统能力,又进一步分为系统处理时间、数据库处理时间和网络传输时间;
前端展现时间:取决于用户端的处理能力;
系统运维人员
除了关注单个用户的响应时间外,更加要关注大量用户并发访问时的负载,以及可能的更大负载情况下的系统健康状态、并发处理能力、当前部署的系统容量、可能的系统瓶颈、系统配置层面的调优、数据库的调优以及长时间运行稳定性和可扩展性;
软件设计开发人员
软件性能关注的是性能相关的设计和实现细节,贯穿软件设计和开发的全过程;
软件性能通常包含算法设计、架构设计、性能最佳实践、数据库相关、软件性能的可测试性五个方面;
算法设计
核心算法的设计实现是否高效;
必要时,是否采用buffer机制,提高性能,降低I/O;
是否存在潜在的内存泄漏;
是否存在并发环境下的线程安全问题;
是否存在不合理的线程同步方式;
是否存在不合理的资源竞争;
架构设计
全局观看系统,是否可以方便的进行系统容量扩充;
应用集群的可扩展性是否经过测试和验证;
缓存集群的可扩展性是否经过测试和验证;
数据库的可扩展性是否经过测试和验证;
性能最佳实践
代码实现是否遵守开发语言的性能最佳实践;
关键代码是否在白盒级别进行性能测试;
是否考虑前端性能优化;
必要的时候是否采用数据压缩传输;
压缩+加密场景,是否先压缩再加密;
数据库
数据库表设计是否高效;
是否引入必要的索引;
SQL语句的执行计划是否合理;
SQL语句在实现功能的同时是否考虑性能;
数据库是否引入读写分离机制;
系统冷启动后,缓存大量不命中的时候,数据库承载的压力是否超负荷;
软件性能可测试性
是否为性能分析提供必要的接口支持;
是否支持高并发场景下的性能打点;
是否支持全链路的性能分析;
性能测试人员眼中的软件性能
性能测试工程师关注的是算法设计、架构设计、性能最佳实践、数据库相关、软件性能可测试性这几个方面;
性能测试工程师的技能:
性能需求的总结和抽象能力;
根据性能测试目标,精准的性能测试场景设计和计算能力;
性能测试场景和性能测试脚本的开发和执行能力;
性能测试报告的分析解读能力;
性能测试数据的设计和实现能力;
全链路压测的设计和执行能力,处理流量标记、影子数据库的设计能力;
深入理解性能测试工具的内部实现原理,可对性能测试工具进行扩展二次开发;
极宽的知识面,系统架构、存储架构、网络架构等全局的知识,还要有点的知识积累,数据库SQL语句的执行计划调优、JVM垃圾回收机制、多线程常见问题;
软件性能的三个最常用的指标
并发用户数
是性能需求和测试最常用,也是最重要的指标之一;
业务层面:实际使用系统的用户数;
后端服务器层面:同时向服务器发送请求的数量,直接反映了系统实际承载的压力;
分析得到准确的用户行为模式,是性能测试中的关键一环;采用系统日志分析/参考行业中类似系统的统计信息来建模,然后分析;
响应时间
完成某个操作所需要的时间,即应用系统从请求发出开始,到客户端接收到最后一个字节数据所消耗的时间;是用户视角软件性能主要体现;
前端响应时间:客户端接收到服务器返回的数据后渲染页面所消耗的时间;
服务端响应时间:从发起请求到请求处理完成的时间;
系统吞吐量
是最能直接体现软件系统负载承受能力的指标;单位时间内业务处理数量;
—————————————————————————————————
第29讲 性能测试的基本方法和应用领域
七种性能测试方法
后端性能测试
通过性能测试工具模拟大量的并发用户请求,然后获取系统性能的各项指标,并且验证各项指标是否符合预期的性能需求的测试手段;
指标:并发用户数、响应时间、系统吞吐量、CPU占用率、磁盘I/O、网络I/O、内存使用率;
应用场景:
基于性能需求目标的测试验证;
探索系统的容量,并验证系统容量的可扩展性;
前端性能测试
前端性能关注的是浏览器端的页面渲染时间、资源加载顺序、请求数量、请求缓存使用情况、资源压缩等内容;
减少Http请求次数;
减少DNS查询次数;
避免页面跳转;
使用内容分发网络;
Gzip压缩传输文件;
代码级性能测试
是指在单元测试阶段对代码的时间性能和空间性能进行必要的测试和评估,以防止底层代码的效率问题在项目后期才被发现的尴尬;
压力测试
指的是后端压力测试,通过不断地对系统施加压力,并验证系统长期处于临界饱和状态的稳定性以及性能指标,并试图找到系统处于临界状态时的主要瓶颈点。
应用场景:
系统容量规划测试;
配置测试
主要用于观察系统在不同配置下的性能表现;
宿主操作系统、应用服务器、数据库、JVM、网络环境等配置;
并发测试
同一时间,同时调用后端服务,观察被调用服务在并发情况下的行为表现,旨在发现诸如资源竞争、资源死锁之类的问题;
可靠性测试
验证系统在常规负载模式下长期运行的稳定性;
性能测试的四大应用领域
能力验证
验证系统能否在某些条件下是否具有某些能力;
能力规划
如何才能使系统达到要求的性能和容量;
性能调优
解决性能测试过程中发现的性能瓶颈的问题,涉及多个层面的调整,包括硬件设备选型、操作系统配置、应用系统配置、数据库配置和应用代码实现的优化;
缺陷发现
通过性能测试的各种方法来发现诸如内存泄漏、资源竞争、不合理的线程锁和死锁等问题;
—————————————————————————————————
第30讲 后端性能测试工具原理及其简介
后端性能测试和后端性能测试工具之间的关系
完整的后端性能测试包括性能需求获取、性能场景设计、性能测试脚本开发、性能场景实现、性能测试执行、性能结果报告分析、性能优化和再验证;
后端性能测试工具和GUI自动化测试工具最大的区别是什么?
模拟用户行为的方式不同
GUI测试模拟的是用户的界面操作;
后端性能测试工具模拟的是用户的客户端和服务端之间的通信协议和数据;
测试的执行方式不同
GUI测试是单用户执行并验证功能结果;
后端性能测试的执行,需要同时模拟大量的并发用户,不仅要验证业务功能是否完成,还要收集各种性能监控指标,会设计到压力产生器、并发用户调度控制、实时监控手机等内容;
后端性能测试工具的原理
虚拟用户脚本生成器:后端性能测试工具会基于客户端和服务端的通信协议,构建模拟业务操作的虚拟用户脚本;
压力产生器:以多线程或进程的方式并发执行虚拟用户脚本,来模拟大量并发用户的同时访问,从而对服务器施加测试负载;
压力控制器:根据性能测试场景的设计,来控制和协调多台压力产生器上的多线程或多进程执行的虚拟用户脚本,最终模拟出性能测试场景中的测试负载;
系统监控器:监控和手机被测系统的各种性能数据,被测系统各个服务器的各种软硬件资源;
测试结果分析器:将系统监控器手机的信息汇总成完整的测试报告;
后端性能测试场景设计
测试负载组成
虚拟用户脚本;
各个虚拟用户脚本的并发数量;
总的并发用户数;
负载策略
加压策略;
减压策略;
最大负载运行时间;
延时策略;
资源监控范围定义
操作系统级别的监控指标;
应用服务器的监控指标;
数据库服务器的监控指标;
缓存集群的监控指标;
终止方式
脚本出错时的处理方式;
负载熔断机制;
负载产生规划
压力产生器数量;
网络带宽要求;
主流测试工具
LoadRunner
JMeter
CloudTest
Loadstorm
PTS
—————————————————————————————————
第31讲 前端性能测试工具原理及其简介
WebPageTest
https://www.webpagetest.org/
前端性能指标
First Byte Time
指的是用户发起页面请求到接收到服务器返回的第一个字节所花费的时间;反映了后端服务器处理器请求、构建页面,并且通过网络返回所花费的时间;
Keep-alive Enabled
每次请求都是用已经建立好的连接,是服务端配置项;配置该项后,可节约近40~50%的时间;
Compress Transfer
文本类资源在传输过程中是否经过压缩处理;同样属于服务端配置项;
Compress Image
图像文件在传输过程中是否经过压缩处理;
普通式JPEG:从上到下,按行扫描文件并存储到JPEG中;
渐进式JPEG:包含多次扫描,将扫描顺序存储在JPEG文件中;
Cache Static Content
静态资源缓存
Effective use of CDN
CDN是内容分发网络,基本原理是采用各种缓存服务器,将缓存服务器分布到用户访问相对集中的地区的网络供应商机房内,当用户访问网站时,利用全局负载技术将用户的访问指向距离最近的、工作正常的缓存服务器上,由缓存服务器直接响应用户请求;
—————————————————————————————————
第32~33讲 服务端性能测试实践
LoadRunner开展性能测试介绍
—————————————————————————————————
第34讲 性能测试补充
性能基准测试
会基于固定的硬件环境和部署架构,通过执行固定的性能测试场景得到系统的性能测试报告,同上一发布版本的指标进行对比;
稳定性测试
通过长时间模拟被测系统的测试负载,来观察系统在长期运行过程中是否存在潜在的问题;
并发测试
验证单一业务功能的正确性以及性能的测试手段
容量规划测试
是为了完成容量规划而设计执行的测试;