一.内容大纲
性能测试的准备:
* 性能测试的目的是什么,即为啥要做性能测试?
* 性能测试范围定义(即一个系统中哪些模块要做性能测试)
* 性能测试的原则是什么?
* 性能测试环境如何搭建?
* 性能测试测试数据如何准备?
性能测试工具:
* 性能测试工具的选择
* LR原理
* 性能测试怎么做-以LR工具为例说明,其他工具测试原理是一样的可以类推?
* LR脚本调试流程
* LR脚本执行过程
性能测试结果分析:
* 如何获取系统合理并发数?
* 性能测试数据收集
* 性能测试数据分析
* 如何判断性能测试达标?
* 性能测试结果达不到指标要求怎么办?
* 性能测试经验和教训总结
二.性能测试的目的是什么
即为啥要做性能测试?
1. 验证改进的性能结果,需要和以前的测试结果进行比对
这也是最常见的一个目的,开发人员对系统调优后,需要测试人员配合去做性能测试,验证这次优化是否有效果,如果性能指标相比较之前的性能指标更好了,说明系统优化的有效果反之说明调优不理想。
2. 新的业务上线,验证新系统能够满足系统的上线指标
这个一般创业公司遇到会多一些,一个系统从无到有上线,验证新系统的能力是否能够满足某段时间内系统使用要求,否则有可能一上线没多少访问量系统就挂了,那就悲剧了。
3. 验证系统稳定性
虽然我们做性能测试的时候经常是跑1两个小时或者几十分钟就ok了,但实际上对于代表这个系统能够长期稳定的工作,这个是不够的,系统出现稳定性问题一般有内存泄漏、连接数泄漏、死锁、游标不够用等,这些问题在短时间的测试中可能不会暴露出来,所以为了验证系统稳定我们需要做稳定性测试,对于稳定性测试条件允许的情况一般用性能峰值并发数(即系统支持的最大并发数)*7天*24小时,系统的吞吐量,平均响应时间等各项性能指标均正常则认为系统稳定性是ok的,但是对于一些公司它可能没有那么多时间或资源提供给你做这么长时间的性能测试,那么又要验证系统稳定,可以参考性能峰值并发数*2天*24小时(或者至少压测一个晚上的时间),基本保证系统稳定。当然对于比较重要的系统还是建议7*24小时比如12306的买票系统,充分保证大数据量情况下的稳定性。
4. 验证系统的架构是否存在瓶颈
有时开发架构师会针对系统做一些架构设计,那么不同的设计方案到底哪个好,我们通过性能测试可以验证系统哪种设计方案更好,其次了解系统大概达到什么量级的并发后系统就会出现问题,了解系统架构在达到性能峰值时哪块会出现瓶颈,帮助开发针对性的进行系统调优工作。
三.性能测试范围定义
即一个系统中哪些模块要做性能测试?
和整个儿开发团队一起确认性能测试的范围:
一般考虑的点有如下几点:
1. 系统中被频繁使用的功能、调用的接口等
2. 系统中涉及到大量数据库读、写的功能
3. 大量读写系统缓存部分的功能,验证缓存是否生效
总得来说应该将用户访问量大的,频繁操作数据库的,系统核心功能这些地方考虑到性能测试范围内。
四.性能测试的原则是什么?
比较粗暴:模拟所有可能发生的最极端情况
可以这样理解,性能测试不能只考虑安逸的情况下指标如何好,要多模拟极端环境能否支持,因为可能发生的极端环境一旦发生,系统撑不下去使用不了影响是很大的。
五.性能测试环境如何搭建?
1. 硬件环境(参考生产环境搭建并考虑自身的硬件成本)
2. 软件环境(配置版本保持一致)
3. 网络环境(参考生产环境尽可能不要跨网段)
但是测试环境的投入是个大问题,很多公司的性能测试环境和生产创建差异很大,我们来看看不同级别的公司性能测试做法:
第一种:财大气粗的公司:就是即将正式上线使用的生产环境,业务上线之前把线上数据导出来在测试环境做性能测试这是模拟的比较好的测试环境;
第二种:中档公司:应该要每个环节必须要有,一般性能测试环境组成是由web服务器、缓存服务器、数据库服务器、负载均衡服务器等,这些环境都应该要在测试环境中进行部署,保证麻雀虽小五脏俱全;
第三种:比较穷的公司:线上环境和测试环境有明显差异:比如一共就两台机器就让你又部署应用程序又压测的,这种还能不能做性能测试呢?
如果程序很烂,就算部署机器很少但是也是能发现程序明显的问题的,所以这种情况下做性能测试还是有意义的,可以基于现有环境下把程序做到最优。
那么如何去做环境的搭建呢:
首先我们要分析系统真实的运行网络拓扑环境,明确公司可对性能测试进行投入的软硬件资源,并且尽量保证性能测试环境和功能测试环境分开;
其次根据现有可支配的资源去设计性能测试环境的架构,如可以用visio等软件来画出从前端服务器到应用控制服务器到负载、数据库等服务器,每个要部署几个分别部署在哪台机器上,做到部署之前看图一目了然
然后对于部署的应用软件应当保证与生产环境配置一致,如apache版本、mysql版本、操作系统版本、jdk环境版本等等,尽量保证软件环境与生产环境的一致性
对于软件的网络环境,参考生产环境的网络结构和搭建,做到尽可能不要跨多个网段,如果不在一个网段,等于是跨网段做压力测试,这样请求有可能会被路由器或者网关之类的弄的变慢,即压力无法充分的达到服务端上去。一般性能测试优化的点都是操作系统、数据库、程序层面的,网络这个层面的东西一般不作为性能测试主要优化的环节,一般网络都是负责机房的网络工程师去负责监控和调优的,所以性能测试尽量不要跨多个网段,不要因为跨网段产生一些影响导致分析的结果出现偏差。(未完待续)