性能测试目的
从质量把控的角度,通过做性能测试来判定当前系统是否满足上线需求:
- 容量测试:支持的最大用户并发数量,是否能满足当前系统的使用需要
- 负载测试: 判断系统在不同负载情况下的运行情况和吞吐效率,判定当前系统在多大用户数量时会发生系统瓶颈,对比线上需求,判断是否需要性能优化
- 压力测试: 判断系统崩溃的临界点,知道当前系统能支持的最大用户数,判定是否适应将来使用需求
评测软件系统的每一部分,给出性能调优建议:
- Web应用性能测试
- Web服务性能测试(接口SOAP/REST)
- FTP性能测试
- 数据库性能测试
- LDAP性能测试
- JMS性能测试
常用指标
不同架构的软件有不同的性能指标,对于B/S架构的软件,通常更关注Web服务器的性能指标
- 平均每秒响应次数
- 每秒点击数
- 尝试连接数
对于C/S架构的软件,通常更注重数据库的测试指标
- 用户连接数
- 数据库死锁
- 数据库Cache的命中情况
指标要根据不同的场景灵活选择,除了上述指标,还有
- 系统资源使用情况:CPU/内存占用率
- 数据库连接池
性能测试的种类
- 可靠性测试:测试系统运行一段时间的稳定性。
- 并发测试:多个用户访问同一个应用,同一个模块斯否会存在死锁和其他性能问题。
- 负载测试: 逐步加压,测试系统的处理能力,确定系统能够承受的各项阈值,即出指定指标下的系统负载量(响应时间不超过10s,系统CPU的利用率不超过85%)。
- 压力测试: 逐步加压,测试系统的性能变化,并指出在什么样的情况下系统性能会处于失效状态。
- 容量测试:系统能测试的最大的会话能力。
- 失败测试:对于有冗余备份和负载均衡的系统,通过冗余测试来检验一台机器down掉了,整个系统是否还能正常使用以及承受的压力
- 配置测试:通过测试系统的软硬件配置,找到各项资源的最优配置原则。
性能测试常用流程
分析应用程序
- 了解系统的硬件配置:测试环境和生产环境的配置情况(CPU,内存,网络,网卡,硬盘...)
- 了解系统的软件架构:系统架构拓扑图(OS,Web Server:Tomcat,DBs:Mysql, Applications)
- 系统使用到的通讯协议, Client和Server的交互模式
- 线上用户的使用情况(多少用户并发使用....)
明确测试目标
测试指标可以是需求说明中指定的性能指标,也可以是性能测试工程师分析出来的性能指标,一般选取终端用户使用频率比较高的行为和动作。
- 响应时间:完成一个业务流程需要的时间
- 可靠性:持续运行多久仍然可靠
- 系统可扩展:最大支持多少并发用户
- 识别瓶颈:哪一段程序的响应时间最慢
明确完性能测试的目标以后,要将这些目标转化为Loadrunner可度量的性能参数,根据测量结果计算参数,确定实际的性能情况。
创建虚拟用户脚本
执行期间每个虚拟用户的操作
创建运行场景
监控运行
分析运行结果
性能测试环境搭建
在实际测试中,性能测试的环境往往和真实的线上环境有一定的差距,因此评估出来的性能测试结果并不准确.面对测试环境资源有限的情况,通常通过以下两种方式来评估真实环境的表现.实际测试过程中,需要保持一个干净的环境,因此及时备份环境非常重要。
建模: 修改各项配置, 根据各项基准配置与实际的性能结果建模,推导出真实环境下性能的情况(相应时间,TPS等指标..)
集群:对于较大的系统来说,单台服务器的处理能力有限,线上常常用集群来增加性能。实际测试环境可以对集群上的一个节点进行性能评估,再计算每增加一个节点的性能损失,通过此种方式来评估多台集群的性能表现。
基线对比:同样的测试环境,不同版本的应用之间的性能指标对比来判断性能是否有提升或者是下降。
监控线上指标:获取线上实际使用指标,拿配置较低的测试环境运行看能否满足指标,若测试环境就可满足指标,可推导出线上环境性能更优。
由于基线对比和监控线上指标不需要建模,适合短平快不需要精确性能指标的项目,在实际中也能得到广泛应用。
线上数据检测