性能测试是软件测试的重要组成部分,也是难度比较大的,大部分人学习性能测试都是偏重工具的使用了,有点本末倒置,性能测试最主要还是性能分析,性能调优。
要去测性能我们首先得知道哪些因素会影响到性能,我们知道一个应用系统不是独立的,而是依赖很多因素,依赖的因素都是影响性能的变量,如果我们只关注某些因素那测试的时候一定要保持其他因素不变才会有个稳定的结果。以看病为例,从中医的角度看人体器官是个互相依赖的复杂系统,不能头痛医头脚痛医脚。
下面介绍下哪些因素会影响到性能,以及是怎么影响的。经过长期的测试经验以及查阅资料我总结出影响系统性能有5大因素。分别是硬件层面、操作系统层面、中间件及数据库、应用程序层面、系统物业量及操作习惯。
1)硬件层面
一个系统想要跑的快,那承它的硬件一定要好,比如同样是玩王者荣耀,使用骁龙865处理的手机,肯定比使用骁龙660的手机要跑的快。在手机上观看在线高清直播使用5G网络的手机,理论上比使用4G网络的手机要流畅的多。同样都是骁龙865处理的同款手机,大家更希望购买内存更大一些的手机,因为性能上会更好。因此硬件的好坏对系统性能会产生直接的影响。硬件上影响系统性能主要有:处理器(CPU)、存储(Storage)、网络(Network),计算机硬件资源也主要是这3方面的资源,现在流行的云计算也主要是这3大资源的虚拟化。
2)系统层面
操作系统(Operating sytstem)是大部分应用离不开的一个平台,目前前后端主流的操作系统是Linux,Windows,Android,iOS。同一种操作系统,不同的发行版本对性能的影响也是比较大。
操作系统层面涉及到的调优就太多了啊,先别说怎么调,关是选哪个就够头疼了,以Linux为例。Redhat、CentOS、SuSE你选哪个,用哪个版本?特别是你的应用比较偏底层处理的话会影响很大的,比如我自己测的产品跑性能测试时,SuSE 11 SP1结果比较好,升级到SuSE 11 SP2性能下降明显,调查发现新patch的一个功能会影响到功能,最后解决方案就改配置把那个功能禁用了。后面从SP2升级到SP3发现性能又降了,具体原因还在调查中...
另外一些操作系统常用的配置,比如你没有使用GUI的需求,那就直接禁用GUI,如果你的应用对磁盘操作比较多,那你得对比下不同文件系统的性能情况
3)中间件、数据库
这一层不是每个应用都会涉及,但大多数复杂的后台应用系统都会涉及到。比如很多web server会用到middleware Tomcat、Nginx, 会用到数据库MySQL、Oracle. 不同的服务器系统本身性能就有很大的差异,同样的服务器系统不同版本之间又存在一定的差异,及时版本相同如果配置不同,性能也是有差异的。世界上没有两片完全相同的叶子,世界上也没有两个性能完全一样的服务器系统。
4)应用程序
应用程序这个就是我们直接接触,直接测试的系统本身了,对性能影响最大的因素毫无疑问就是应用程序本身了,上边三个层面虽然也会对系统性能产生很大的影响,但是基本上是我们测试人员无法左右的,所以我们测试人员最为关注的是应用程序层面。试想一下一个刚毕业的菜鸟写出来的代码和开发大牛写的代码比肯定被甩出几条街,无论是功能上、稳定性上、扩张性上都差距巨大,性能上自然也是差异巨大的。应用程序层面不管是前端代码、还是后端代码都会对系统性能产生很大的影响。后端代码主要体现在算法上,同样的查询结果可以使用不同的sql语法来实现,不同的语法性能是有差异的。前端代码主要和使用的框架、插件等有很大关系,当然也和前端工程师写的代码质量有很大关系。
5)系统物业量及操作习惯
系统性能除了受以上4大因素影响外,还会受到比如系统的业务、数据库的数据量、操作时段等因素影响。比如12306系统平日使用感觉挺流畅的,一到春运系统卡的要命,主要是因为春运期间同时在线的并发操作太多了,服务器每秒收到的请求过多,处理自然慢。还有比如一个系统一开始数据量很小,随着使用时间的增长,数据库里边数据量越来越大,数据库的数据量越大,查询数据就越慢。