前言
1、性能测试场景设计
性能测试场景设计,是性能测试中的重要概念,性能测试场景设计,目的是要描述如何执行性能测试。
通常来讲,性能测试场景设计主要会涉及以下部分:
并发用户数是多少?
测试刚开始时,以什么样的速率来添加并发用户?比如,每秒增加 5 个并发用户。 为什么要逐步增加负载? 如果我们一下子将负载升到峰值,系统如果支持不了,会一瞬间挂掉。
达到最大并发用户数后持续多长时间?
测试结束时,以什么样的速率来减少并发用户?比如,每秒减少 5 个并发用户。
需要包含哪些业务操作,各个业务用户占比是多少?比如,10%的用户在做登录操作,70% 的用户在做查询操作,其他 20% 的用户在做订单操作。
一轮虚拟用户脚本执行结束后,需要等待多长时间开始下一轮执行?
同一虚拟用户脚本中,各个操作之间的等待时间是多少?
脚本执行过程中报错怎么处理?比如,自动停止测试,继续下一次迭代。
需要监控哪些被测服务器的哪些指标?
以上这些场景组合在一起,就构成了性能测试场景设计的主要内容。
也就是说,性能测试场景会对测试负载组成、负载策略、资源监控范围定义、终止方式,以及负载产生规划作出定义,而其中的每一项还会包含更多的内容。
2、性能调优
性能调优主要涉及这些方面:
代码、数据库、网络、硬件、系统构架
具体如下:
1)代码
缓存:缓存是典型的空间换时间,在软件项目中,用的最多的是redis缓存,第一次查询的时候,将查询数据存储到缓存中,后面每次查询,先从缓存中取数据,缓存中没有,再去数据库中取数据。
多线程&多进程:使用多线程,缩短任务时间。
异步:针对某些客户端的请求,在服务端可能需要针对这些请求做一些附属的事情,这些事情其实用户并不关心或者用户不需要立即拿到这些事情的处理结果,这种情况就比较适合用异步的方式处理这些事情。
作用:缩短接口响应时间,使用户的请求快速返回,用户体验更好。
批处理:是把一堆基本相同的请求批量处理,这样可以一批数据只写一次数据库,减少数据库的操作次数;
简化代码:
如:减少循环的层数,减少递归,在循环中少声明变量,少做分配和释放内存的操作,尽量把循环体内的表达式抽到循环外,条件表达的中的多个条件判断的次序,尽量在程序启动时把一些东西准备好,注意函数调用的开销(栈上开销),注意面向对象语言中临时对象的开销,小心使用异常等。
前端-减少http 请求次数: 每个http请求从建立到关闭都需要一定的时间,因此减少http请求的数目可有效提高访问性能。网页中的的图片、form、flash等等元素都会发出http请求。
前端-减少 DNS 查询次数:DNS 的作用是将 URL 转化为实际服务器主机 IP 地址,实现原理是分级查找,查找过程需要花费 20~100ms 的时间,所以一方面我们要加快单次查找的时间,另一方面也要减少一个页面中资源使用了多个不同域的情况;
前端-减少或避免页面跳转:页面跳转相当于又打开一个新的页面,耗费的时间就会比较长,所以要尽量避免使用页面跳转;
前端-减少网页大小:网页过大,如果要快速下载,下载网页内容会需要比较大的带宽,带宽就有可能成为瓶颈。
表单压缩,减少网络传输数据量,典型的时间换空间,虽然压缩消耗时间,但如果瓶颈在网络,用时间换空间反而能节省时间。
使用内容分发网络(CDN):使用 CDN 相当于对静态内容做了缓存,并把缓存内容放在网络供应商(ISP)的机房,用户根据就近原则到 ISP 机房获取这些被缓存了的静态资源,因此可以大幅提高性能;
2)数据库
添加/修改索引:通过索引查询,缩短查询时间;通过修改联合索引,增加索引命中率。
分区分库分表:不同服务或者不同业务的数据配置不同的数据库,这样在进行增删改查时候可减少数据库磁盘的读写频率。 备注:分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介
数据库读写分离:从主库写入数据,从库读取数据,减少数据库磁盘的繁忙频率。
修改数据库连接池:重新定义数据库连接池数,减少任务的排队数量。
硬件配置:提高数据库CPU、内存、磁盘等硬件配置,提升处理能力。
3)网络
调整带宽
4)硬件
增加机器数量:对于实现了分布式服务,增加服务器数量
提高硬件配置:提高服务器CPU、内存、磁盘等配置,提高单台服务器的处理能力
JVM:合理的分配堆与非堆的内存、GC
中间件:调整ES、MQ中间件的配置架构,如增加中间件机器配置、单机改为分布式
5)系统架构
单机改为分布式集成、负载均衡
其中:
时间(对于应用服务器而言):软件的响应时间…
空间(对于硬件服务器而言):服务器的磁盘使用率、CPU使用率、内存空闲率…
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!