Ⅰ 性能测试分析实践分享!
对于压力测试结果的分析没有一个系统的思路,在压力测试结果不符合性能指标时无从下手,也无法向开发提出有效的优化性能的方法。在对多个项目分析后,总结出一个通用的分析思路,可以快速定位性能瓶颈。
整体分析思路如下图所示
其中客户端问题概率较小。主要分析重点在 网络问题 及 服务端问题 上面。
1、原因解析 :
出现TPS波动较大问题的原因一般有 网络波动 、 其他服务资源竞争 以及 垃圾回收问题 这三种。
2、排查方法:
2.1 压力测试环境一般都是在内网或局域网内进行,可通过监控网络的出入流量来排查;
2.2 其他服务资源竞争也可能造成这一问题,可以通过top命令或服务梳理方式来排查在压测时是否有其他服务运行;
2.3 垃圾回收问题相对来说是最常见的导致TPS波动的一种原因,可以通过GC监控命令来排查,命令如下:
1、原因解析:
出现该类问题,常见的原因有 短连接导致的端口被完全占用 以及 线程池最大线程数配置较小或超时时间较短 导致。
2、解决方案:
1、原因解析:
2、解决方案 :
性能测试结果分析是性能测试过程中的最后一步,也是一个非常重要的部分,以系统的思路进行分析,可以一层一层剥离问题表象,找到真正的性能瓶颈并进行优化,提升整体服务性能。
Ⅱ 性能测试结果分析:CPU占用率降低表示什么
cpu占用率降低,表示有进程结束,释放了资源。
譬如,某系统启动数据采集后的cpu 占用率,比关闭数据采集时高。分析原因:
(1)未开启数据采集时,可能一直有采集进程进行扫描;启动数据采集后,采集到数据后可能会触发关闭某些进程,使cpu降低。
(2)推测导致性能缺陷:关闭数据采集的开关(方法)存在问题,导致关闭不彻底,关闭后仍有进程在运行。
验证推测结论的正确性:
(1)关闭数据采集时,监控有哪些进程;
(2)开启数据采集后,监控有哪些进程;
(3)通过对比,找到因自身结束而导致cpu降低的进程。
(4)通知开发进行性能调优
Ⅲ 如何写软件测试性能测试用例和结果分析
1. 测试目的.... 4
2. 测试地点.... 4
3. 测试环境.... 4
3.1. 服务器、客户端环境.... 4
3.2. 测试工具.... 4
4. 测试规模及限制.... 5
5. 测试过程说明.... 5
5.1. 测试模型.... 5
5.2. 测试案例.... 5
5.3. 测试场景.... 6
6. 测试结果.... 7
6.1. 平均响应时间.... 7
6.2. 差错率统计.... 8
6.3. 主机系统资源消耗.... 10
7. 性能测试总结.... 10
8. 大数据量业务测试数据.... 10
8.1. 测试参数.... 10
8.2. 测试结果.... 11
这是我的性能测试报告的目录,你可以参考一下,具体项目还是根据实际情况及需求编写性能测试用例,主要考虑用户的接受程度,比如:某一段时间的登陆量,最大同时在线用户,最大允许数据响应时间等。
Ⅳ 性能测试的步骤
在每种不同的系统架构的实施中,开发人员可能选择不同的实现方式,造成实际情况纷繁复杂。我们不可能对每种技术都详细解说,这里只是介绍一种方法提供给你如何选择测试策略,从而帮助分析软件不同部分的性能指标,进而分析出整体架构的性能指标和性能瓶颈。
由于工程和项目的不同,所选用的度量,评估方法也有不同之处。不过仍然有一些通用的步骤帮助我们完成一个性能测试项目。步骤如下
1. 制定目标和分析系统
2. 选择测试度量的方法
3. 学习的相关技术和工具
4. 制定评估标准
5. 设计测试用例
6. 运行测试用例
7. 分析测试结果 每一个性能测试计划中第一步都会制定目标和分析系统构成。只有明确目标和了解系统构成才会澄清测试范围,知道在测试中要掌握什么样的技术。
目标:
1. 确定客户需求和期望
2. 实际业务需求
3. 系统需求
系统组成
系统组成这里包含几方面含义:系统类别,系统构成,系统功能等。了解这些内容的本质其实是帮助我们明确测试的范围,选者适当的测试方法来进行测试。
系统类别:分清系统类别是我们掌握什么样的技术的前提,掌握相应技术做性能测试才可能成功。例如:系统类别是bs结构,需要掌握 http协议,java,html等技术。或者是cs结构,可能要了解操作系统,winsock,com等。所以甄别系统类别对于我们来说很重要。
系统构成:硬件设置,操作系统设置是性能测试的制约条件,一般性能测试都是利用测试工具模仿大量的实际用户操作,系统在超负荷情形下运作。不同的系统构成性能测试就会得到不同的结果。
系统功能:系统功能指系统提供的不同子系统,办公管理系统中的公文子系统,会议子系统等,系统功能是性能测试中要模拟的环节,了解这些是必要的。 经过第一步,将会对系统有清醒的认识。接下来我们将把精力放在软件度量上,收集系统相关的数据。
度量的相关方面:
* 制定规范
* 制定相关流程,角色,职责
* 制定改进策略
* 制定结果对比标准 性能测试是通过工具,模拟大量用户操作,对系统增加负载。所以需要掌握一定的工具知识才能进行性能测试。大家都知道性能测试工具一般通过winsock,http等协议记录用户操作。而协议选择是基于软件的系统架构实现(web一般选择http协议,cs选择winsock协议),不同的性能测试工具,脚本语言也不同,比如rational robot中vu脚本用类c语言实现。
开展性能测试需要对各种性能测试工具进行评估,因为每一种性能测试工具都有自身的特点,只有经过工具评估,才能选择符合现有软件架构的性能测试工具。确定测试工具后,需要组织测试人员进行工具的学习,培训相关技术。 任何测试的目的都是确保软件符合预先规定的目标和要求。性能测试也不例外。所以必须制定一套标准。
通常性能测试有四种模型技术可用于评估:
*线性投射:用大量的过去的,扩展的或者将来可能发生的数据组成散布图,利用这个图表不断和系统的当前状况对比。
*分析模型:用排队论公式和算法预测响应时间,利用描述工作量的数据和系统本质关联起来
*模仿:模仿实际用户的使用方法测试你的系统
*基准:定义测试和你最初的测试作为标准,利用它和所有后来进行的测试结果进行对比 运行测试用例后,收集相关信息,进行数据统计分析,找到性能瓶颈。通过排除误差和其他因素,让测试结果体现接近真实情况。不同的体系结构分析测试结果的方法也不同,bs结构我们会分析网络带宽,流量对用户操作响应的影响,而cs结构我们可能更关心会系统整体配置对用户操作的影响。
Ⅳ 性能测试包括哪些方面
性能测试包括负载测试和压力测试。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。通常情况下,三方面有效、合理的结合,可以达到对系统性能全面的分析和瓶颈的预测。
Ⅵ 如何进行性能测试与分析
“为什么我上线系统的性能和性能测试的结果相差很大呢?”这是一些用户会经常碰到的问题。当然产生这个问题的原因很多,下面我用一个很典型的例子来说明一下。一个用户登录界面,要求用户输入用户名、密码点击登录,登录系统。程序的处理流程如下:根据输入的用户名、密码生成SQL语句,select roleID from usertable where username='用户名' and password='密码',把这条语句发给ORACLE数据库,从数据库中查询数据,如果查询的roleID不为空则是合法用户允许登录,否则不允许登录系统。 这是一个非常简单的系统。性能测试人员用LOADRUNNER录制脚本,然后用逐步加压的方式来运行脚本,TPS、ORACLE的命中率、资源占用都很理想。性能测试人员就陷入了一种盲目的乐观情绪中,就认为系统性能没有问题,结果在实际运行中系统性能与性能测试中的性能相差很大,为什么会出现这种情况呢,下面我们来分析一下:首先我们来了解一下ORACLE的运行机制:从客户端发送一条SQL语句到ORACLE服务端,ORACLE要对SQL语句进行解析、执行、返回结果。 并且ORACLE有一个LRU(最近最常使用的语句)机制,把最近最常使用的SQL语句保存到共享内存SGA中的libary cache中,下一次再有这样的请求它就不解析了,直接从共享内存中使用。假如我们使用的SQL语句是select roleID from usertable where username='AAA' and password='123',在我们加压的时候它就解析一次或很少的几次,其他的请求就会从共享内存中取得,并且返回的结果也会保存到BUFFER CACHE中,这样系统的测试结果当然就是很好的。但在实际工作中,用户名和密码是各种各样的,而ORACLE解析的条件又要求非常苛刻,SQL语句有一点不同它就认为是不同的SQL语句就要重新进行解析,而解析非常耗费系统资源,所以在实际运行中系统的性能和性能测试的结果相差很大。通过这个例子我们可以看出我们没有把真正的压力压到点上,也就是进行的不是有效性能测试。如何进行有效性能测试呢?一定要仔细地分析你要进行测试系统的架构、技术体系,LOADRUNNER只是一个加压工具,它对 ORACLE的监控也非常的不好,不要盲目的相信LOADRUNNER.一定要充分重视测试的调研和设计工作,如果能在测试前拿到系统开发的各种文档是最好的,如果没有也要充分调研业务人员、开发人员、系统运维人员,了解系统的技术架构、业务组成、业务流程、业务频度、数据量等要素,这样才能进行有效性能测试
Ⅶ 软件性能测试分析的几种方法
”。这里强调以下内容:
(1) 充分准备以下内容:硬件设备、软件环境、网络条件、基础数据
(2) 充分准备测试场景、典型的场景包括操作序列、并发用户数量条件、用例。
该部分包括使用到上述测试方法:性能测试方法、可靠性测试、压力测试、失效恢复测试
2. 规划性能
3. 发现缺陷
这个环节中是交付给用户的主要工作成果。需要多和开发人员作沟通、多次迭代发现问题、根据用户的需求定义与缺陷的涉及范围、制定一个解决缺陷的优先级。由于软件永远有BUG这一真理,所以发现缺陷不是一次就能结束的工作。比较适合作为服务外包。持续进行。
4. 性能调优
一个标准的性能调优过程是:
(1) 确定基准环境、基准负载和基准性能指标。
(2) 调整系统运行环境和实现方法,执行测试。
(3) 记录测试结果、进行分析
在J2EE性能测试中有很多常见的错误,比如:对于某些建立在J2EE/EJB技术上的应用,在服务启动的时候,没有注意到测试之前首先进行一段时间的预热。这是因为JAVA语言的hot-spot技术特性决定的,这种技术允许weblogic第一次运行应用的时候将字节码编译为本地代码并执行,这样在后续的执行过程中执行过程会大大加快,但第一次由于存在一个编译过程会比较慢。如果使用这个时间来作为基准那么就容易得出错误的结论。
Ⅷ 性能测试分析
如下图系统场景中,可以按照系统性能资源因素分为 CPU,内存,网络,IO 等四块区域来进行监控分析定位
度量方法:
衡量标准:注意 >=50%,告警 >=70%,严重 >=90%
度量方法:
衡量标准:
运行的队列大于1时,证明已经有一定的负载了,不过这个计数也不绝对,需进一步分析其他的资源情况来断定是否 CPU 已经满负荷动作。
度量方法:
(9)通过perf 工具去捕获处理器的错误信息,需处理器支持
衡量标准:需处理器支持
衡量标准:注意>=50%,告警 >= 70%,严重 >= 80%
度量方法:
衡量标准:
(1)so 数值大,且 swapd 已经占比很高,内存肯定已经饱和。
(2)sar 命令次缺页多意味已经在不停地和 swap 打交通,证明内存已经饱和
(3)当内存不够用会触发内核的 OOM 机制
度量方法:
衡量标准:有计数
度量方法:
衡量标准:
度量方法:
衡量标准:统计的丢包有计数证照已经满了
度量方法:
衡量标准:错误有计数
度量方法:
衡量标准:注意 >= 40%, 告警 >= 60%, 严重 >=80%
度量方法:
衡量标准:IO 已经有满载嫌疑
度量方法:
衡量标准:有信息
Ⅸ 性能测试的方法
对于企业应用程序,有许多进行性能测试的方法,其中一些方法实行起来要比其他方法困难。所要进行的性能测试的类型取决于想要达到的结果。例如,对于可再现性,基准测试是最好的方法。而要从当前用户负载的角度测试系统的上限,则应该使用容量规划测试。本文将介绍几种设置和运行性能测试的方法,并讨论这些方法的区别。
如果不进行合理的规划,对J2EE应用程序进行性能测试将会是一项令人望而生畏且有些混乱的任务。因为对于任何的软件开发流程,都必须收集需求、理解业务需要,并在进行实际测试之前设计出正式的进度表。性能测试的需求由业务需要驱动,并由一组用例阐明。这些用例可以基于历史数据(例如,服务器一周的负载模式)或预测的近似值。弄清楚需要测试的内容之后,就需要知道如何进行测试了。
在开发阶段前期,应该使用基准测试来确定应用程序中是否出现性能倒退。基准测试可以在一个相对短的时间内收集可重复的结果。进行基准测试的最好方法是,每次测试改变一个且只改变一个参数。例如,如果想知道增加JVM内存是否会影响应用程序的性能,就逐次递增JVM内存(例如,从1024 MB增至1224 MB,然后是1524 MB,最后是2024 MB),在每个阶段收集结果和环境数据,记录信息,然后转到下一阶段。这样在分析测试结果时就有迹可循。下一小节我将介绍什么是基准测试,以及运行基准测试的最佳参数。
开发阶段后期,在应用程序中的bug已经被解决,应用程序达到一种稳定状态之后,可以运行更为复杂的测试,确定系统在不同的负载模式下的表现。这些测试被称为容量规划测试、渗入测试(soak test)、峰谷测试(peak-rest test),它们旨在通过测试应用程序的可靠性、健壮性和可伸缩性来测试接近于现实世界的场景。对于下面的描述应该从抽象的意义上理解,因为每个应用程序的使用模式都是不同的。例如,容量规划测试通常都使用较缓慢的ramp-up(下文有定义),但是如果应用程序在一天之中的某个时段中有快速突发的流量,那么自然应该修改测试以反映这种情况。但是,要记住,因为更改了测试参数(比如ramp-up周期或用户的考虑时间(think-time)),测试的结果肯定也会改变。一个不错的方法是,运行一系列的基准测试,确立一个已知的可控环境,然后再对变化进行比较。 基准测试的关键是要获得一致的、可再现的结果。可再现的结果有两个好处:减少重新运行测试的次数;对测试的产品和产生的数字更为确信。使用的性能测试工具可能会对测试结果产生很大影响。假定测试的两个指标是服务器的响应时间和吞吐量,它们会受到服务器上的负载的影响。服务器上的负载受两个因素影响:同时与服务器通信的连接(或虚拟用户)的数目,以及每个虚拟用户请求之间的考虑时间的长短。很明显,与服务器通信的用户越多,负载就越大。同样,请求之间的考虑时间越短,负载也越大。这两个因素的不同组合会产生不同的服务器负载等级。记住,随着服务器上负载的增加,吞吐量会不断攀升,直到到达一个点。
注意,吞吐量以稳定的速度增长,然后在某一个点上稳定下来。
在某一点上,执行队列开始增长,因为服务器上所有的线程都已投入使用,传入的请求不再被立即处理,而是放入队列中,当线程空闲时再处理。
注意,最初的一段时间,执行队列的长度为零,然后就开始以稳定的速度增长。这是因为系统中的负载在稳定增长,虽然最初系统有足够的空闲线程去处理增加的负载,最终它还是不能承受,而必须将其排入队列。
当系统达到饱和点,服务器吞吐量保持稳定后,就达到了给定条件下的系统上限。但是,随着服务器负载的继续增长,系统的响应时间也随之延长,虽然吞吐量保持稳定。
注意,在执行队列(图2)开始增长的同时,响应时间也开始以递增的速度增长。这是因为请求不能被及时处理。
为了获得真正可再现的结果,应该将系统置于相同的高负载下。为此,与服务器通信的虚拟用户应该将请求之间的考虑时间设为零。这样服务器会立即超载,并开始构建执行队列。如果请求(虚拟用户)数保持一致,基准测试的结果应该会非常精确,完全可以再现。
您可能要问的一个问题是:“如何度量结果?”对于一次给定的测试,应该取响应时间和吞吐量的平均值。精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。这称为“flat”测试。
与此相对应的是“ramp-up”测试。
ramp-up测试中的用户是交错上升的(每几秒增加一些新用户)。ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。因此,flat运行是获得基准测试数据的理想模式。
这不是在贬低ramp-up测试的价值。实际上,ramp-up测试对找出以后要运行的flat测试的范围非常有用。ramp-up测试的优点是,可以看出随着系统负载的改变,测量值是如何改变的。然后可以据此选择以后要运行的flat测试的范围。
Flat测试的问题是系统会遇到“波动”效果。
注意波动的出现,吞吐量不再是平滑的。
这在系统的各个方面都有所体现,包括CPU的使用量。
注意,每隔一段时间就会出现一个波形。CPU使用量不再是平滑的,而是有了像吞吐量图那样的尖峰。
此外,执行队列也承受着不稳定的负载,因此可以看到,随着系统负载的增加和减少,执行队列也在增长和缩减。
注意,每隔一段时间就会出现一个波形。执行队列曲线与上面的CPU使用量图非常相似。
最后,系统中事务的响应时间也遵循着这个波动模式。
注意,每隔一段时间就会出现一个波形。事务的响应时间也与上面的图类似,只不过其效果随着时间的推移逐渐减弱。
当测试中所有的用户都同时执行几乎相同的操作时,就会发生这种现象。这将会产生非常不可靠和不精确的结果,所以必须采取一些措施防止这种情况的出现。有两种方法可以从这种类型的结果中获得精确的测量值。如果测试可以运行相当长的时间(有时是几个小时,取决于用户的操作持续的时间),最后由于随机事件的本性使然,服务器的吞吐量会被“拉平”。或者,可以只选取波形中两个平息点之间的测量值。该方法的缺点是可以捕获数据的时间非常短。 对于性能规划类型的测试来说,其目标是找出,在特定的环境下,给定应用程序的性能可以达到何种程度。此时可重现性就不如在基准测试中那么重要了,因为测试中通常都会有随机因子。引入随机因子的目的是为了尽量模拟具有真实用户负载的现实世界应用程序。通常,具体的目标是找出系统在特定的服务器响应时间下支持的当前用户的最大数。例如,您可能想知道:如果要以5秒或更少的响应时间支持8,000个当前用户,需要多少个服务器?要回答这个问题,需要知道系统的更多信息。
要确定系统的容量,需要考虑几个因素。通常,服务器的用户总数非常大(以十万计),但是实际上,这个数字并不能说明什么。真正需要知道的是,这些用户中有多少是并发与服务器通信的。其次要知道的是,每个用户的“考虑时间”即请求间时间是多少。这非常重要,因为考虑时间越短,系统所能支持的并发用户越少。例如,如果用户的考虑时间是1秒,那么系统可能只能支持数百个这样的并发用户。但是,如果用户的考虑时间是30秒,那么系统则可能支持数万个这样的并发用户(假定硬件和应用程序都是相同的)。在现实世界中,通常难以确定用户的确切考虑时间。还要注意,在现实世界中,用户不会精确地按照间隔时间发出请求。
于是就引入了随机性。如果知道普通用户的考虑时间是5秒,误差为20%,那么在设计负载测试时,就要确保请求间的时间为5×(1 +/- 20%)秒。此外,可以利用“调步”的理念向负载场景中引入更多的随机性。它是这样的:在一个虚拟用户完成一整套的请求后,该用户暂停一个设定的时间段,或者一个小的随机时间段(例如,2×(1 +/- 25%)秒),然后再继续执行下一套请求。将这两种随机化方法运用到测试中,可以提供更接近于现实世界的场景。
进行实际的容量规划测试了。接下来的问题是:如何加载用户以模拟负载状态?最好的方法是模拟高峰时间用户与服务器通信的状况。这种用户负载状态是在一段时间内逐步达到的吗?如果是,应该使用ramp-up类型的测试,每隔几秒增加x个用户。或者,所有用户是在一个非常短的时间内同时与系统通信?如果是这样,就应该使用flat类型的测试,将所有的用户同时加载到服务器。两种不同类型的测试会产生没有可比性的不同测试。例如,如果进行ramp-up类型的测试,系统可以以4秒或更短的响应时间支持5,000个用户。而执行flat测试,您会发现,对于5,000个用户,系统的平均响应时间要大于4秒。这是由于ramp-up测试固有的不准确性使其不能显示系统可以支持的并发用户的精确数字。以门户应用程序为例,随着门户规模的扩大和集群规模的扩大,这种不确定性就会随之显现。
这不是说不应该使用ramp-up测试。对于系统负载在一段比较长的时间内缓慢增加的情况,ramp-up测试效果还是不错的。这是因为系统能够随着时间不断调整。如果使用快速ramp-up测试,系统就会滞后,从而报告一个较相同用户负载的flat测试低的响应时间。那么,什么是确定容量的最好方法?结合两种负载类型的优点,并运行一系列的测试,就会产生最好的结果。例如,首先使用ramp-up测试确定系统可以支持的用户范围。确定了范围之后,以该范围内不同的并发用户负载进行一系列的flat测试,更精确地确定系统的容量。 渗入测试是一种比较简单的性能测试。渗入测试所需时间较长,它使用固定数目的并发用户测试系统的总体健壮性。这些测试将会通过内存泄漏、增加的垃圾收集(GC)或系统的其他问题,显示因长时间运行而出现的任何性能降低。测试运行的时间越久,您对系统就越了解。运行两次测试是一个好主意——一次使用较低的用户负载(要在系统容量之下,以便不会出现执行队列),一次使用较高的负载(以便出现积极的执行队列)。
测试应该运行几天的时间,以便真正了解应用程序的长期健康状况。要确保测试的应用程序尽可能接近现实世界的情况,用户场景也要逼真(虚拟用户通过应用程序导航的方式要与现实世界一致),从而测试应用程序的全部特性。确保运行了所有必需的监控工具,以便精确地监测并跟踪问题。 峰谷测试兼有容量规划ramp-up类型测试和渗入测试的特征。其目标是确定从高负载(例如系统高峰时间的负载)恢复、转为几乎空闲、然后再攀升到高负载、再降低的能力。
实现这种测试的最好方法就是,进行一系列的快速ramp-up测试,继之以一段时间的平稳状态(取决于业务需求),然后急剧降低负载,此时可以令系统平息一下,然后再进行快速的ramp-up;反复重复这个过程。这样可以确定以下事项:第二次高峰是否重现第一次的峰值?其后的每次高峰是等于还是大于第一次的峰值?在测试过程中,系统是否显示了内存或GC性能降低的有关迹象?测试运行(不停地重复“峰值/空闲”周期)的时间越长,您对系统的长期健康状况就越了解。
Ⅹ 如何进行性能测试与分析
首先通过日志分析出用户行为,得出qps,
场景收集完,着手模拟,验证产品的性能指标,业务qps,稳定性,最优配置,等等