【转】性能测试步骤

性能测试步骤

性能测试步骤(一)-熟悉应用

这是整个性能过程最关键的步骤之一,毋庸质疑。

我们必须了解:应用的架构

以我熟悉的应用类型为例。了解了应用架构,我们才能知道,我们需要模拟的是:一般的html静态文件请求、一般的servlet和jsp请求、AJAX请求、还是远程调用请求等。

我们必须了解:应用的功能逻辑

性能测试步骤(二)-测试需求

我们得到的测试需求往往是这么描述的:

这个系统能否支撑100万的uv(每天登录系统的人次)。

言下之意是:按照目前的硬件性能和数量,系统能否支撑100万的uv。

然而,我们了解的是吞吐量、响应时间等指标

吞吐量:系统每秒能处理的请求数,这个指标从服务器的视角,表征系统容量

响应时间:从请求发出到第一个字节返回所需要的时间,这个指标从用户的视角,表征系统响应速度。

那么,请问开发同事:能把测试需求转化成我们熟悉的吞吐量和响应时间吗?

。。。。

答案常常是否定的

怎么办:只能由我们根据经验,把100万uv转化成一系列的指标。

响应时间:根据国外的一些资料,一般操作的响应时间不能高于3~5秒;重要操作,如结账操作的响应时间不能高于15秒。

吞吐量:可以根据已经上线的类似产品进行估计。或者,采用80/20原则进行估计。我们经常使用的是80/20原则。

虽然已经有了响应时间和吞吐量指标,但是测试需求还是不明确的。

我们的测试目的是什么?

是验证当前硬件和软件配置能否支撑100万uv?

是测试当前的硬件和软件配置最多能支撑多少uv?

是帮助开发寻找性能瓶颈?

虽然已经有了响应时间和吞吐量指标,但是测试需求还是不明确的。

我们的测试目的是什么?

是验证当前硬件和软件配置能否支撑100万uv?

是测试当前的硬件和软件配置最多能支撑多少uv?

是帮助开发寻找性能瓶颈?

答案往往是:都要!

根据我们的经验,开发的需求往往是这样的(当然开发一般不会说得那么详细,^_^):

首先,请你们验证能否支撑100万uv。

如果不能支撑,请找一下性能瓶颈。

主要性能瓶颈解决后,请估计能支撑多少uv,如果不到100w,请估计要加多少机器。

如果能支撑100万,请再加压,看看达到300万uv的时候,系统的性能。

这么一细化,需求基本明确了。

性能测试步骤(三)-测试准备

测试准备包括测试客户端机器准备、测试数据准备、测试脚本准备。

客户端机器:

要足够,否则,如果瓶颈在客户端,就无法评估服务端。

要和服务器保持网络通畅,否则,如果瓶颈在网络,也无法评估服务端。包括:

网络带宽要高于服务器吞吐量

网络带宽要稳定。

测试数据

如果被测功能涉及数据库和高速缓存,通常需要预设很大的数据量才能凸显性能瓶颈,这通常是挺困难的一个环节。

如果是已经上线的应用,数据可以从线上拷贝得到;如果还没有上线,那需要构造类似于线上的数据量。

比如,要测试群聊性能,我们首先需要注册大量用户;然后把测试用户都加入到聊天群中。

测试数据准备的脚本,有时候比测试脚本本身还要多。

对于实在没有办法构造大数据量的情况,如果要测试高速缓存,我们有时候会按数据量的比例减少高速缓存,以使测试结果尽量准确。

测试脚本

Grinder脚本用jython实现

测试脚本的实现往往会花费比较长的时间

因为涉及到应用实现的细节,需要和开发不断交流才能完成。这也是需要了解应用架构的原因之一。

关于sleep time

基于真实模拟的考虑,sleep time还是尽量按照真实时间,并给一定的偏差。

不过对于测试客户端来说,sleep time往往会引起很多客户端测试线程的调度,浪费客户端系统资源。

Sleep time越小,客户端能模拟的吞吐量就越大,所以,实际测试中,我们往往会把sleep time设置为0 。

性能测试步骤(四)-测试执行

测试的执行中,需要监控测试客户端和服务器性能,监控服务器端应用情况:

客户端的系统资源(cpu、io、memory)情况

服务端的系统资源(cpu、io、memory)情况

服务器的jvm运行情况

服务端的应用情况,看是否有异常

响应时间、吞吐量等指标

系统资源监控,linux下可以采用的工具有:vmstat、top、meminfo等。

JVM的监控,可以用jprofiler工具,linux下面的jmap、jhat等。

响应时间、吞吐量等,由grinder提供。

上述这些信息,一般在测试结束后,均需要归档整理,已备后续详细分析

我们自己开发一套脚本,用于以固定的频率获取测试客户端和服务器的vmstat和top输出、grinder的log,并从中截取有用信息保存,用于事后分

析。

每次测试运行完以后,肯定会增加很多数据,需要考虑本次执行对数据量的影响,如果数据量的变化对后续测试会有影响,则需要清理数据。

性能测试步骤(五)-测试分析

测试分析一般跟测试监控息息相关,在测试执行的过程中,用各种监控工具能看到系统运行的状态,并及时发现问题。

常见的问题有:

内存问题

有限资源竞争问题

内存问题

从top中看tomcat的内存占用,这个是不准的,需要用专门的内存分析工具来查看。

工具:jmap,jhat,jstat,可以得到内存快照,得到堆内存的详细信息。

垃圾收集配置会影响系统性能,如果内存块生成和销毁量很大,则能看到系统吞吐量随垃圾收集呈现周期性的变化。

从理论上来说,JAVA会出现内存泄漏的情况,不过我们在被测试的应用中还没有发现过这种情况。

但是,在某些系统架构下,内存会成为瓶颈问题。比如我们曾经测试过聊天系统,每个长连接需要占用5M内存,那么,一台10G内存的服务器只能保持2000个长连接。

共享资源竞争问题

有限资源的竞争有很多,比如Service层的一个共享对象,比如数据库连接,比如数据库中的某一个使用频率很高的数据表。

一个共享资源在一个时间点上,只能被一个线程获得,其他线程必须等待,这就容易造成很多线程的timed wait状态。通过jprofiler工具,能够得到线程快照,并分析改进方法。

性能测试经验交流-偶然性问题

跟一般的功能测试一样,性能测试也会出现偶然性问题。

碰到这种问题,我们需要发挥测试人员的革命精神,追查到底。我们常发现的因素如下:

外部因素变化,比如,某几次测试,有时候好,有时候不好,并没有规律可循。最后发现原来是因为网络不稳定造成。请求返回变化。有时候第二次请求的内容取决于第一次的返回信息(也就是所谓的“关联”),这种关联一般通过string的parse实现,而这一般都不是很可靠,返回一旦变化,可能就会出错。

应用服务器如果是集群,一个用户请求某一台服务器能得到正确返回,但是如果换做另一个用户,可能该服务器并没有该用户的信息,所以返回错误。

性能测试经验交流-客户端并发

测试客户端要模拟高并发,必然要启动多线程,所以肯定也会存在线程并发问题。比如:

在做参数化的时候,存储参数的数组就是一个共享对象。如果要使每个线程的每次循环都读取不一样的参数,那数组下标的更新需要注意并发问题。

比如,如果在脚本中要调用System.out,那么也需要注意这也是一个共享对象,如果调用System.out过多,会导致线程的等待,使客户端性能降低。

性能测试经验交流-测试人员

性能测试由于涉及面广,对测试人员的要求就很高。我想,性能测试人员应该培养如下几方面的能力:

如前所述,对应用架构的透彻理解。

沟通能力,测试进行过程中,一定要培养勤于跟开发沟通的意识,以提高工作效率。

解决问题的能力,在编脚本或者测试执行过程中,会碰到很多问题。首先是不要害怕,先考虑问题的可能原因,然后一步步定位、验证。当然,这个过程,需要调试等经验的不断积累

时间: 2024-07-30 13:37:17

【转】性能测试步骤的相关文章

性能测试步骤

系统性能测试中的几大步骤 1.明确测试目标:了解性能测试需求: 2.编写性能测试计划: 3.分析性能测试需求: 4.编写性能测试方案,设计测试场景: 5.相关资源准备(人力资源,硬件资源,软件资源): 6.测试程序开发:脚本维护,测试数据准备,测试监控准备: 7.执行性能测试并收集测试结果: 8.分析结果: 9.系统调优及再测试: 1.明确测试目标:了解性能测试需求:     性能测试启动阶段要确定测试的负责人和组织结构.明确测试的总体目标和范围,确认资源情况.获取 性能测试需求:业务列表,性能

性能测试概要

声明:本文为博主原创文章,未经博主允许不得转载. 1.性能测试注意事项 2.性能测试步骤 3.常见性能指标 4.性能计数器 5.LoadRunner 工具性能测试的步骤 1.性能注意事项 1.1 优化性能 1.2 最小化成本 1.3 最小化风险 1.4 交付高质量的系统需要注意性能测试成本因素 ? 评价系统当前性能 ? 寻找瓶颈,优化性能 ? 预测系统未来性能.稳定性 -----------------------------------Start------------------------

JMeter远程分布式联机性能测试

测试环境 apache-jmeter-2.13 Java JDK版本:1.8 1.  JMeter分布式测试简介 当一个JMeter客户端因网络限制等因素,无法模拟足够的用户对服务器施压时,需要用到JMeter分布式测试:用一台控制机,控制多台远程负载机,同时对服务器施压. 2.  配置与实操 步骤1 选定客户端 选择一台本地机器,当作JMeter客户端(控制器),用于控制远程JMeter实例(也叫JMeter 引擎),即远程负载生成机,并收集来自从这些远程负载机的数据. 在本机上创建并调试脚本

性能测试的过程(jmeter)

一.web性能测试的准备工作 1.项目背景 访问地址 访问环境:windows 2.需求 并发登陆的性能(要求多少个用户登录) 3.场景 60秒内运行100个线程 线程在20.50.100并发下的表现 4.监控 成功率.响应时间.标准差.cpu.IO 资源监控需在linux上部署监控agent 二.Web性能测试步骤 1.制作登陆脚本(使用badboy录制),导出 2.设置参数化.断言和断言结果 3.设置集合点 4.添加监听器 5.设置场景 6.启动测试,查看监控 7.保存测试结果,整理测试报告

jmeter脚本开发:性能测试的基础概念(一)

一. 什么是(软件)性能测试 性能:事务.物品的某些特性的评价值 软件性能测试:是用一定的技术,找出或验证某个性能指标值的测试,如:你跑100米,用时多少? 举例: “看看你有几斤几两”: 逐步增加系统负载,测试系统性能变化,并最终确定系统所能承受的最大负载量 “鸭梨好大哦!”: 在较大的性能压力下,持续运行一个比较长的时间,看系统服务及各项资源利用情况 关键词:较大压力 + 较长时间 一般测试中,找出最大的负载量,比如100,然后选择一个比100稍微小点的做7 x 24小时压力测试.一般开始前

Lamp访问提速

由于php是一个脚本语言,每次运行的时候都要进行编译,这样一来,性能必定有所下降,故采用php缓存实现加速功能,提高性能,目前主流的加速器有:APC(Alternative PHP cache),eAccelerator,Xcache.从速度,内存,使用率综合考量eAccelerator优势突出.本文就eAccelerator加速器安装步骤最为详解. 本测试环境Lamp架构.VirtualBoxVM.CentOS release 6.4.MemTotal: 1030736 kB. 优化前(加速前

Jmeter Cluster

Jmeter 是开源软件,100%纯java应用程序,专门为负载测试和性能测试. Jmeter的特性包括: 1.负载测试和性能测试许多不同的服务器/协议类型: Web - HTTP, HTTPS SOAP / REST FTP Database via JDBC LDAP Message-oriented middleware (MOM) via JMS Mail - SMTP(S), POP3(S) and IMAP(S) MongoDB (NoSQL) Native commands or

jmeter笔记8

JMETER接口性能测试方案 JMETER简介 JMeter可以用于测试静态或者动态资源的性能(文件.Servlets.Perl脚本.java对象.数据库和查询.ftp服务器或者其他的资源). JMeter用于模拟在服务器.网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况.你可 以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为. 场景介绍 被测dubbo服务: com.alifi.adapter

性能测试准备工作及步骤

性能测试是一项浩大的工程,若你只想随便找台机器装上ld后,造几条数据,弄几个并发用户简单跑一下出来结果就可以万事大吉了,那你就大错特错了!(这样得出的测试结果没有任何价值和意义,当然更无法依此评估出你贵公司系统的性能了. 性能测试真正开始执行之前除了编写详细的性能测试计划[所需的资源(软件+硬件+人力)].设计测试脚本.准备测试数据.搭建测试环境外,还需要注意一下细节: 如何保证性能测试的顺利开展和执行?1.首先考虑你性能测试的目标是什么,需要哪些人员协助你才能完成,然后协调相关人员(DBA.网