半桶水谈性能测试

首先在我的职业生涯中,做性能测试的机会不多,发现性能瓶颈的次数更少,确切的说只有2次。随着大型分布式系统,特别是Web App和云计算的推广,性能测试的需求会更加迫切。今天我这个半桶水就来谈谈性能测试的话题,欢迎大家一起来讨论。

  什么是性能测试?

  性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

  负载测试和压力测试都属于性能测试,两者可以结合进行。

  通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。

  压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。

  中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。

  通常情况下,三方面有效、合理的结合,可以达到对系统性能全面的分析和瓶颈的预测。

  注意这里提到了三个方面,但平常我们往往注意力集中在服务端的性能而忽略了客户端和网络的性能。

  下面是我这个半桶水来谈谈一些体会:

  一、目的/需求

  为什么需要做性能测试或此次做性能测试的目的是什么?

  1、新项目/产品,首次发布,需要做基准测试

  2、使用中的产品,重构了某个模块/某个模块使用了新的技术,需要一个评估

  3、使用中的产品,用户量爆发了,用户量从百万级增加到千万级

  4、增加了一个或多个页面,需要对页面的Latency进行一次测试

  在测试开始前,需要有准备工作,对此次性能测试的目的做详细了解,确定需要收集哪些数据,关注哪些性能指标。

  二、环境部署

  性能测试需要一个干净的环境,这个环境包括硬件、网络、操作系统、被测试的系统,数据库

  那在开始前,需要把这个环境部署准备好,最好是能模拟线上的系统,同时这也是一个排除干扰的过程,画出一张架构图。

  1、硬件,使用怎样的服务器,理想情况是和生产环境一样的服务器,需要配置负载均衡么

  2、网络, 是否需要模拟各种网络,是否需要双网卡,内部网络是否会影响到其他员工正常使用

  3、操作系统,windows/linux,是采用默认设置还是已经有参考的设置,哪些操作系统的服务需要关闭,linux中的ulimit如何设置

  4、被测试系统,邀请架构师的参与,系统使用怎么样的架构,是否使用了Web Server——IIS/Apache/Tomat,他们的最优配置是怎么样的

  5、数据库,站内搜索数据库是否和订单数据库分开,数据库是否有缓存,数据库是否使用主从式

  三、场景和负载模式

  此次性能测试需要模拟怎样的场景:

  1、购物网站秒杀活动,使用恒负载模式,设定集合点,用户并发

  2、系统正常的使用,从每天的监控系统中分析,例如看到购物高峰是中午,使用单步负载模式(Ram-up/down),每间隔时间内用户增加多少,到购物高峰时间是恒负载,过了高峰后用户开始减少

  3、系统改版,使用基于目标的负载模式,根据历史数据设定目标,或例如设定CPU/Memory最大到85%

  确定好了场景和负载模式,才能正确的生成用例/脚本。

  四、性能指标

  此次性能测试需要收集哪些性能指标和数据:

  1、CPU使用率

  2、Memory使用率

  3、QPS

  4、响应时间

  5、网络IO

  6、文件IO

  7、数据库IO

  8、最大支持用户数

  以上指标并不是都要收集,要根据具体的场景来决定。

  五、性能测试工具

  提到性能测试,很多测试人的第一概念就是工具,比如商业流行的Loadrunner,开源流行的Jmeter,但是很少人注重上面提到的四点, 所谓“磨刀不误砍材工”,没有上面的设计分析,仅仅使用工具跑出结果是无法分析出性能的瓶颈,不可靠的数据结果会大大增加排查工作,这些数据往往会受到很 多质疑。

  工具的使用:

  参数化

  Loadrunner选择哪个协议

  Loadrunner的关联

  Loadrunner的Controller/Agent

  Jmeter的Remote testing

  工具的使用技能仅仅是性能测试里的一小部分,切不可只关注工具使用。

  是否每次的性能测试都需要用上大型的工具呢,某个页面的响应时间是否可以使用其他轻量的工具,例如一些浏览器插件Httpwatch,Yahoo YSlow,Google speed tracer;

  是否可以自己写些有针对性的小工具,根据实际情况定义出真实的Page load time,而不仅仅是服务器的响应时间。

  六、数据收集与分析

  性能测试的最终目的是通过数据收集分析出系统是否存在瓶颈,所以数据收集和分析是一个很重要的过程。

  分析的过程需要团队成员的参与,例如架构师、DBA、开发人员,是一个长期的过程,通过调整测试脚本,生成不同的数据对比。

  七、我所发现的2次问题

  1、双网卡问题,一个新改版的项目,上线后在峰值的时候总有机器崩溃或性能大幅下降,最后发现是服务器只使用了单网卡,这个明显就是上面提到的排除干扰没做好(配置没有检查),这次性能测试是失败的。

  2、子进程崩溃,64位系统基准测试,通过与团队成员的不断沟通,排除各种设置干扰、确定硬件和软件配置、加入profile工具,与32位系统的对比。

  八、后续优化

  性能测试仅仅是个开始,性能测试最终目的是发现和解决系统的瓶颈,这就涉及到优化,而优化的过程往往在系统设计阶段就需要考虑。

  1、异步获取数据

  2、建立缓存

  3、分布式

  4、文件分解

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-10 07:54:07

半桶水谈性能测试的相关文章

浅谈性能测试

负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担.通过逐步增加系统负载,确定在满足性能指标的情况下,系统所能承受的最大负载量. 很久没有做接手项目性能方面的测试,感觉陌生了许多,由于这次一个简单的web页面的压力测试,突然觉得知识的积累不够深刻,不能学着学着就丢了,如何积累成为自己的才是最重要的,凡是最后忘记的了那只能说明还是认识和学习不深刻.性能测试一直都是测试行业的一个难点,更是重点,可能我们都想做好它,但是不见得都有信心做好它,性能测试是一个带着诸多非常不确定因素进行的,

如何快速实现一个基于Nginx的网站监控场景 – 操作篇

本文介绍ARMS如何实现Nginx的监控场景,对于ARMS本文主要解决的问题,还记得小明的老板给他布置的任务吗?需求回顾 1. ARMS的Nginx监控方案概述和准备 目前在监控领域上比较流行的数据处理方法有很多种,例如,搜索引擎,时间序列数据库,实时计算,甚至是大数据离线计算,等. ARMS采用的是实时计算+列式存储.这种方案的优势是数据实时性高,而且对于固定的数据查询接口查询效率非常快.在Nginx的监控方案中,其架构概要如下所示, 蓝色部分为ARMS所集成的Nginx监控开箱即用的黑盒.

浅谈应用性能测试 PTS

阅读原文 我们为什么要进行性能测试? 1. 评估系统的能力. 当应用上线有大量用户当问的时候,页面的打开速度直接影响用户体验,进而影响用户的留存.了解用户的真实使用体验,对应用做出针对性的性能评估,有效提升用户体验. 2. 验证系统的稳定性和可靠性. 在整个的网站应用架构体系中,会有一些接口基础服务,它的职责是对外输出一些稳定的查询,一些服务能力,这个时候系统需要有较高的稳定性,比如访问量很多,数据量很大,这个时候就需要关注性能.另外对于一些核心系统,可用性很高,对于性能系统也是非常关键的. 3

从用户感知谈软件性能测试

虽然,有一段时间没关注性能测试,但时常还能看到有同学讨论性能,对于一些概念的理解很想深入讨论,但三言两语说不清,于是,还是花点时间写写吧! 今天有一个同学问:"一个小的系统,用户并发数为20个,那事务平均响应时间大概在什么范围内?" 怕麻烦直接告诉他2/5/8原则,钻牛角尖的话,需要进一步确认什么样的小系统?提供的什么类型的业务?用户行为是什么样的?用户对系统的使用频率?就算同响应时时间一样,前端通过不同展现方法,用户的感知可能完全不一样.下面就真对这个问题延伸讨论一下从用户感知的角度

软件测试之性能测试浅谈(2)

模拟演练 写了一大堆,新手还是不知道如何去做.其实写本文的目的也不是讲具体操作,而是思想,思想.新手学性能测试,建议找一本从LOADRUNNER开讲的书比较好.如51TESTING上有连载的<性能测试从零开始>. 不过还是尽量说点具体些的内容吧. 普通BS架构的系统,一般都采用测试工具(如LR)直接录制手工操作的方式进行测试.这种方式简单有效,对测试人员要求不高.但在一些情况下,这种基于录制的方法可能无法完成,比如页面上有特殊控件.系统是CS架构.或者通讯的协议无法捕获等.这时就需要更复杂的测

软件测试之性能测试浅谈

性能测试种类的划分与定义这里就不说了,各有各的说法,比如性能测试.负载测试.压力测试这三个词,在网上能找到N个版本的定义,大体理解就行了,没必要在文字层面上较这个真.以下的内容也只是我个人的理解,一些名词的定义可能和其他资料有所不同,但在我的工作中,这样是比较形象和容易理解的. 性能测试的目的,简单说其实就是为了获取待测系统的响应时间.吞吐量.稳定性.容量等信息.而发现一些具体的性能相关的缺陷(如内存溢出.并发处理等问题),我认为只是一种附加结果.从更高的层次来说,性能测试最想发现的,是瓶颈.

谈服务器性能测试 域名的查询和注册

服务器http://www.aliyun.com/zixun/aggregation/14356.html">性能测试 1.服务器探针测试 服务器探针应该是使用最为广泛的测试虚拟主机性能的程序,根据所支持的脚本不同,又分为ASP探针.PHP探针.JSP探针等.顾名思义,如果你是ASP的空间,就要使用ASP服务器探针进行空间的测试.这里我们以一款阿江ASP探针程序为例,说明服务器探针的使用方法. 第一步:下载探针源程序,一般是网页程序如.asp后缀的文件,解压缩后将其上传到网站任一目录. 第

基于linux的Web服务器性能测试

一.基于linux的Web服务器性能测试的重要性 linux作为一种免费的开源操作系统,正越来越受到人们的重视.随着稳定的Linux 2.4内核发布日期的临近和Intel IA-64构架的推出,Linux在服务器操作系统市场所占的份额会继续扩大,那么基于Linux的应用也就会日益丰富.而在Internet时代,操作系统最广阔的市场空间就是Web服务器,正是遍布全球的千千万万的Web服务器才构成了因特网信息资源的基础,而Web服务器性能的优劣直接关系到人们对信息资源的利用效率,因此对Web服务器性

性能测试知多少---并发用户

在做性能测试的时候,我们常常听到并发用户.响应时间.吞吐量专业术语,也许大家都理解,这里有一个理解的层次与深度概 念.最近有看断念<软件性能详解与案例分析>一书,看了他的讲解,原来我对这些术语的理解还是比较肤浅,其实,这里也主要受制于自己的知识面.所以,再拿 出来与大家重温一下.  ps:按照惯例先上个图,因为看纯文字的文章比较累!^_^     并发用户数 大家都知道我们的性能测试就通过工具模拟多用户对系统进行操作,对系统造成压力,来验证系统的性能(不太标准的解释). 好多人也简单的把性能测