性能测试流程
(1)问清性能测试需求
首先,要问本次性能测试的需求是什么,或者性能测试的目的是什么? 我把性能测试按目的分以下几种。
1)新系统能力验证
比如,你们刚好开发了一个新系统,在上线前需要验证系统性能。这种情况比较简单;你可以有更多的自由选择测试环境、压力点和测试工具;测试策略上也比较灵活。并且如果性能测试结果没有明显的短板,也不需要进行调优。
2)客户有明确要求
这是一个好的结果,这说明客户对性能测试有一定的了解,知道他们需要的系统要达到一个什么样的标准。如:系统要求同时满足100用户登陆,平均每个用户登陆时间不能超过5秒。这个需求很明确,当然也不排除一些不懂装懂的用户,提一些不现实的要求。
不管怎么说,用户提要求了,这个比较容易,你可以对现系统做一次性能测试,至于,是通过优化系统还是增加硬件设备才能达到要求。就不是测试考虑的问题了。
3)找出系统性能瓶颈
这个需求的目的就很明确了,目的就是找出系统的性能瓶颈,进行调优或硬件扩容,所以性能测试的重点在系统的架构分析和业务分析上面。
4)稳定性验证(强度测试)
稳定性是系统的一个重要指标,因为系统一旦上线,就有可能会长期处在用户的访问状态,可能以前没发现的一些问题就会暴漏出来。比较典型的就是内存溢出,这种需求在测试策略上就要考虑性能测试的运行时长。
(2)了解系统架构
表示层
表示层(浏览器)通过前端技术(HTML5/JavaScript/CSS3)将系统功能和数据展示给用户,并与用户实现交互。通过TCP/HTTP协议与业务层系统通信,向应用层系统发送请求报文,并接收应用层系统返回的响应报文。
业务逻辑层
业务逻辑层作为中间层实现核心业务逻辑服务。
应用服务器主要运行中间件系统,中间件系统系统作为一个容器来运行各种应用软件系统。前台发来的请求报文通过中间件传递给应用程序,应用程序在处理的过程中调用数据层的数据服务器,数据服务器将查询的数据返回给应用程序,应用软件处理完成后通过中间件系统返回给客户端。
在大型的系统中,可以对应用系统进行拆分,比如拆分成交易服务,查询服务;或者通过负载均衡技术,来分散客户端发来的请求,使其能承受更大的用户访问量。
数据层
数据层运行在数据库主机上,负责整个系统中数据信息的存储。运行数据库服务程序,查询通过JDBC与应用程序进行通信,主要用于存储数据与提供数据查询等服务。
常用的系统架构:
· Linux + Apache + PHP + MySQL
· Linux + Nginx + Redis + PHP + MySQL
· Linux + Apache + Tomcat + Java+ Oracle
· Windows Server 2003/2008 + IIS + C#/ASP.NET + 数据库
· Window Server 2003/2008 + tomcat + MySql/Oracle/ + Java
· Linux + Python + uwsgi + Nginx + MySQL
(3)分析测试点
性能测试点的选取
* 发生频率非常高的(例如:某邮箱核心业务系统中的登录、收发邮件等业务,它们在每天的业务总量中占到90%以上)
* 关键程度非常高的(产品经理认为绝对不能出现问题的,如登录等)
* 资源占用非常严重的(导致磁盘I/O非常大的,例如某个业务进行结果提交时需要向数十个表存取数据,或者一个查询提交请求时会检索出大量的数据记录)
对性能需求点的描述
- 准确
如**系统必须在不超过 10 秒的响应时间内,处理 20 起登录任务。再如发邮件时间最大不超过5秒以及平均时间在2秒以内。
- 一致
用户和性能测试工程师对有关术语的理解要一致,如:并发用户数、在线用户数、注册用户数:
- 特定
性能测试的需求一定是有条件的。
检查系统后台关键业务数据10G、操作数据量为20K,1500 个用户、500 个并发用户运行的负载下,连续运行12小时过程中,业务操作是否满足性能需求。
一般性能需求描述
1、Web首页打开速度5s以下,Web登陆速度 15s以下。
2、邮件服务支持50万个在线用户
3、计费话单成功率达到99.999%以上。
4、在100个并发用户的高峰期,邮箱的基本功能,处理能力至少达到10QPS(TPS). QPS(TPS)--每秒钟请求/事物 数量
5、系统能在高于实际系统运行压力1倍的情况下,稳定的运行12小时。
6、这个系统能否支撑200万的VU(每天登录系统的人次) VU--Virtual user(虚拟用户)
(4)选择测试工具
(5)测试计划
(6)搭建测试环境
(7)执行测试
1、准备测试数据
2、使用测试工具模拟测试点,回放OK
3、根据测试策略,使用不同的虚拟用户和测试组合 运行测试。
4、监控系统CPU、内存、中间件,数据库的性能,收集数据。
5、重复3、4。
(8)性能调优
步骤一:确定问题
应用程序代码:在通常情况下,很多程序的性能问题都是写出来的,因此对于发现瓶颈的模块,应该首先检查一下代码。
数据库配置:经常引起整个系统运行缓慢,一些诸如oracle 的大型数据库都是需要DBA进行正确的参数调整才能投产的。
操作系统配置:不合理就可能引起系统瓶颈。
硬件设置:硬盘速度、内存大小等都是容易引起瓶颈的原因,因此这些都是分析的重点。
网络:网络负载过重导致网络冲突和网络延迟。
步骤二:分析问题
当确定了问题之后,我们要明确这个问题影响的是响应时间吞吐量,还是其他问题?是多数用户还是少数用户遇到了问题?如果是少数用户,这几个用户与其它用户的操作有什么不用?系统资源监控的结果是否正常?CPU的使用是否到达极限?I/O 情况如何?问题是否集中在某一类模块中? 是客户端还是服务器出现问题? 系统硬件配置是否够用?实际负载是否超过了系统的负载能力? 是否未对系统进行优化?
通过这些分析及一些与系统相关的问题,可以对系统瓶颈有更深入的了解,进而分析出真正的原因。
步骤三: 确定调整目标和解决方案
得高系统吞吐量,缩短响应时间,更好地支持并发。
步骤四:测试解决方案
对通过解决方案调优后的系统进行基准测试。(基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试)
步骤五:分析调优结果
系统调优是否达到或者超出了预定目标?系统是整体性能得到了改善,还是以系统某部分性能来解决其他问题。调优是否可以结束了。