从今天开始,我将分享:性能测试–聊聊软件性能测试相关的知识点。
对于不同类型的系统,软件性能的关注点各不相同:
1:Web 类应用和手机端应用,以终端用户感受到的端到端的响应时间来描述系统的性能;
2:非交互式的应用,比如电信和银行后台处理系统,响应时间关注更多的是事件处理的速度,以及单位时间的事件吞吐量。
从用户在界面上完成一个操作开始,到系统把本次操作的结果以用户能察觉的方式展现出来的全部时间。对用户来说,时间越短体验越好。
这个时间就是响应时间和展现时间:
1:系统响应时间,反应的是系统能力,又可以进一步细分为应用系统处理时间、数据库处理时间和网络传输时间等;
2:展现时间,取决于用户端的处理能力。(对于用户感知来说,越快越好,可以说是操作的流畅度)
性能测试分为后端的性能测试和前端的性能测试
后端:服务器测试
前端:浏览器/app
软件性能包含算法设计、架构设计、性能最佳实践、数据库相关、软件性能的可测试性这五大方面
1:算法设计:
核心算法的设计与实现是否高效;
设计上是否采用 buffer 机制以提高性能,降低 I/O;
是否存在潜在的内存泄露;
是否存在并发环境下的线程安全问题;
是否存在不合理的线程同步方式;
是否存在不合理的资源竞争。
2:架构设计:
是否可以方便地进行系统容量和性能扩展;
应用集群的可扩展性是否经过测试和验证;
缓存集群的可扩展性是否经过测试和验证;
数据库的可扩展性是否经过测试和验证。
3:性能:
代码实现是否遵守开发语言的性能最佳实践;
关键代码是否在白盒级别进行性能测试;
是否考虑前端性能的优化;
是否采用数据压缩传输;
是否采用先压缩后加密的顺序。
4:数据库:
数据库表设计是否高效;
是否引入必要的索引;
SQL 语句的执行计划是否合理;
SQL 语句要考虑性能要求;
数据库是否需要引入读写分离机制;
冷启动,数据库承载的压力是否超负荷。
5:软件性能:
是否为性能分析(Profiler)提供必要的接口支持;
是否支持高并发场景下的性能打点;
是否支持全链路的性能分析。
软件性能的三个常用的指标:并发用户数、响应时间,以及系统吞吐量
1:并发用户数--业务层面和后端服务器层面的两层含义。
1.1:业务层面的并发用户数,指的是实际使用系统的用户总数。并不能反映系统实际承载的压力,
1.2: 后端服务器层面的并发用户数,指的是“同时向服务器发送请求的数量”,直接反映了系统实际承载的压力。
2:响应时间,分为前端展现时间和系统响应时间两部分
2.1:前端时间,取决于客户端收到服务器返回的数据后渲染页面所消耗的时间;
2.2:系统响应时间,划分为 Web 服务器时间、应用服务器时间、数据库时间,以及各服务器间通信的网络时间。
3:系统吞吐量,是最能直接体现软件系统负载承受能力的指标
Bytes/Second”和“Pages/Second”表示的吞吐量,主要受网络设置、服务器架构、应用服务器制约;
“Requests/Second”表示的吞吐量,主要受应用服务器和应用本身实现的制约。
HTTP或者业务层面,可以选择“Requests/Second”“Pages/Second”
系统层面或网络层面,可以选择“Bytes/Second”,即网卡每秒接收/发送到字节数