2020-11-01

压力测试

定义

压力测试是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况。然后做针对性的测试与分析,找到影响系统性能的瓶颈,评估系统在实际使用环境下的效率情况,评价系统性能以及判断是否需要对应用系统进行优化处理或结构调整。并对系统资源进行优化。

软件系统的负载压力是指系统在某种指定软件、硬件及网络环境下承受的流量,例如并发用户数、持续运行时间、数据量等。其中并发用户数是负载压力的重要指标。

负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。其中还有一种特定类型的负载测试,它是通过逐步增加软件系统的负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,以此来获得系统提供的最大服务级别。

并发性能测试通过逐渐增加并发用户数负载,直到系统的瓶颈或者不能接收的状态,综合分析交易执行指标、资源监控指标等来确定系统并发性能的过程。并发性能测试是负载压力测试的重要内容。

疲劳强度测试是指构建系统稳定运行情况下能够支持的最大并发用户数或者日常运行用户数,使其在持续一段时间内执行业务,保证到达系统疲劳强度需求的业务量,通过综合分析交易执行指标和资源监控指标,来确定系统在处理业务上的最大工作强度的过程。大数据量测试包括针对系统存储、传输、统计、查询等业务进行的独立数据量测试,以及结合压力性能测试、负载性能测试、疲劳性能测试相结合的综合数据量测试。  

软件性能

软件的性能可以通过响应时间、并发用户数、吞吐量、资源利用率等性能指标来衡量。

(1)响应时间:

是指用户从客户端发出请求到接收完服务器返回结果的整个过程所需花费的时间,包含网络传输时间以及服务器处理时间。从用户角度来看,响应时间应该从客户端计算机处理用户操作并发出请求到客户端程序收到服务器端返回结果并显示出来的时间。

(2)并发用户数:

是指在一定时间内,某一时刻同时与服务器进行会话操作的用户数,并发用户数的类型包括:系统用户数、同时在线用户数,业务并发用户数。

(3)吞吐量:

是指单位时间内,系统处理用户的请求数或页面数量,可以直接反映出软件的承载能力。一般来说,利用每秒钟的请求数或页面数量衡量吞吐量;从业务的角度来看,也可以用每天的访问人数或每小时处理的业务数来衡量。

(4)资源利用率:

是指系统资源(CPU、内存)的利用率,通常用资源的实际使用量与总的资源可用量比值来衡量,包括网络、操作系统、数据库等方面。

以上四种性能指标主要可分为系统资源利用率和系统行为(响应时间、吞吐量等)两个方面。它们之间存在一定的相关性,共同反映出性能的不同方面。比如,响应时间、最大并发用户数、吞吐量和资源利用率可以分别用来衡量软件的及时性、扩充能力和容量、处理能力、运行状态。响应时间越短、承受的并发数越多、吞吐量越大、占用的资源越少,表明系统性能越好,反之性能越差。 [2] 

测试流程

编辑

★编写压力测试计划

编写压力测试计划分为三个阶段:分析数据库应用系统、定义压力测试对象与目标、评审修改压力测试计划。

分析应用系统:一要搞清系统对各个资源的分布和使用情况,它将帮助确定可能系统性能的瓶颈;二是用户在事务中的分布,它将确定压力测试的针对点。定义压力测试目标:测定终端用户事务的响应时间、定义主机最优配置(如内存、CPU、缓存、适配等)、寻找瓶颈(通过压力测试,要找到降低系统响应时间的因素。是资源竞争到导致死锁?还是数据库服务器数据锁设置不好?还是网络传输问题?)。评审修改压力测试计划:压力测试计划完成后,要对其进行评审。压力测试计划书的评审人员应包括有经验的用户,软件需求分析员,系统设计员,系统开发员,软件测试员,然后根据评审意见修订并完成测试压力计划书。

★编写压力测试案例

压力测试案例是完成一个测试目的的一组测试时间的序列,测试案例要包括以下几个要素:测试目的,测试环境,测试数据,测试运行程序(可以是脚本),预期结果等。

★多进程模拟多用户

压力测试的执行通常是通过自动化工具执行脚本语言,或通过发包程序发送数据包实现的。前者是通过多进为程运行相同或不同的测试脚本,来模拟多个用户执行相同或不同的任务,实现压力测试。后者要求熟悉数据包的格式,并进行设置。

★设置并发

一个测试脚本常常包含多个事务,即使多个进程同时运行一个脚本,也难以保证脚本内的某个事务同时运行,这将影响对这个事务的响应时间的测试。为了解决这个问题,需要没置并发点,先运行到并发点的进程将等待,当所有进程都运行到并发点时,进行释放,使所有的进程同时运行同一个事务,这样就可以测定与实际比较接近的响应时间。

★运行测试程序并监测系统资源

运行压力测试时还需监测系统资源,监测的对象有:网络阻塞情况、主机CPU使用情况、内存使用情况、缓存使用情况、数据库系统中的数据锁、回滚段、重做日志缓冲区等。监测的结果包括图像与数据文件,并且图像可以实时显示,也可运行结束后分析。

★分析结果

压力测试运行结束后,把所有记录的数据汇总并记录剑文什中。必须对测试的结果进行分析,才能得到结论。可以使用一些图形来比较、观察测试结果。

★优化调整设置

CPU问题:在CPU受到限制的系统中,CPU资源全被使用,并且服务响应时间会很长。这种情况下,必须提高系统的处理能力;

内存与高速缓存问题:内存的优化包括操作系统,数据库,应用程序的内存优化;磁盘(I/O)资源问题:磁盘读写速度对数据库系统是至关重要的,数据库对象在物理设备上的合理分布能改善性能。

调整配置参数:参数配置包括操作系统和数据库的参数配置:优化应用系统网络设置。

★提交测试报告

当压力测试结果可以满足预期需求,或优化和调整已无法改善结果时,最后提交测试报告。在报告中要包括测试提要、测试环境和测试结果,提要应该简单说明测试方法策略范围内容;测试环境应包括资源开销,环境配置等。结果测试必须包括测试是否通过或拒绝,及对测试的结论应进行说明,对系统的性能做出评价。 [3] 

测试自动化

压力测试可以采取手工测试和利用自动化工具测试两种方式。采用手工测试不仅需要大量的测试人员和机器设备,还要考虑同步操作和对被测系统的同步监控的问题,所以执行起来有一定的局限性,测试结果不一定能够有效地为系统调优提供服务,而且还会耗费巨大的人力和物力。

相比之下,在压力测试中采用自动化测试工具能更快捷地解决问题。自动化测试工具可以在一台或多台机器上模拟成百上千的用户同时执行业务操作的场景,并可以很好地同步用户的执行时间,进行有效的实时监测。因此越来越多的压力测试项目中都用到了自动化的测试工具,自动化测试工具也在压力测试多方面的要求中得到了发展和改良。

利用自动化测试工具进行压力测试是压力测试发展的主流趋势。在实际的测试项目实施中,大都使用三类自动化测试工具,它们分别是商业化压力测试工具、开源压力测试工具和自主研发的压力测试工具。

10款压力测试工具:

市面上流行的压力/负载/性能测试工具多是来自国外,近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同,其功能也有很大差异,下面就为您简单介绍10款目前最常见的测试产品。

1、kylinTOP测试与监控平台(商用版)

kylinTOP测试与监控平台是一款B/S架构的跨平台的集性能测试、自动化测试、业务监控于一体的测试平台,它是深圳是奇林软件有限公司旗下的一款产品,该工具开放10个免费虚拟用户可供学习和使用。在易用性上较好,录制脚本支持最新版本的浏览器,对谷歌和火狐都支持非常好。对一些https.的网站证书问题,都为用户自动处理好了,可以轻松录制。录制过程高效便捷这是其它性能工具无法比拟的。仿真能力上是目前业界做的最好的性能工具,可以做到完全仿真浏览器行为,也就是单用户的HTTP请求瀑布图可以和浏览器器完全一样。总之它是目前国内一款非常难得好用的性能测试工具,可以完全替代国外的同类产品。目前在军工领域、测评检测机构、国有企业、银行体系、大型企业有着广泛的应用。支持的协议较多,尤其在视频领域支持的协议非常多,具有独特的优势。官网地址:http://www.70testing.com

2、LoadRunner(商用版)

是一款C/S架构的商业版性能测试工具,在国内存在的时间较早,在国内在使用较广泛,知名度较高。该工具免费开放了50个虚拟用户,可供学习和使用。在国内的网站上有破解版本,但是到了最新的12版本,不再有破解版。破解版的仿真度较差,HTTP的瀑布图是按两个两个并发(与浏览器行为不一样),最新版本的仿真相对提高很多,对于HTTP静态请求相似度请求提高到80%,而动态请求就要差很多。由于loadRunner起步早,支持的协议很多,很多不常用的协议都支持,如电子邮件相关协议都支持。但对一些视频协议支持的不太好。loadrunner目前对浏览器最新版支持的不太好,最新的loadrunner12只支持ie11,对其它浏览器如谷歌、火狐等支持的较差。在脚本录制方面有些网站录制不了。价格上比较昂贵,一般小企业无力承担。

LoadRunner官网:https://saas.hpe.com/zh-cn/software/loadrunner

3、Apache JMeter(开源免费)

JMeter是一款开源免费的压测产品,最初被设计用于Web应用功能测试使用,如今JMeter被国内企业用于性能测试。对于WEB服务器(支持浏览器访问),不建议使用Jmeter,因为jmeter的线程组都是线性执行的,与浏览器相差很大,测试结果不具有参考性。对于纯接口的部分场景(对接口调用顺序无严格要求)测试可以使用,但是要注意使用技巧,才能达到理想结果。

官网链接:http://jmeter.apache.org/

4、NeoLoad(商用版)

NeoLoad是Neotys出品的一种负载和性能测试工具,可真实地模拟用户活动并监视基础架构运行状态,从而消除所有Web和移动应用程序中的瓶颈。NeoLoad通过使用无脚本GUI和一系列自动化功能,可让测试设计速度提高5-10倍,并将维护的脚本维持在原始设计时间的10%,同时帮助用户使用持续集成系统自动进行测试。

NeoLoad支持WebSocket、HTTP1/ 2、GWT、HTML5、AngularJS、Oracle Forms等技术协议,能够监控包括操作系统,应用服务器,Web服务器,数据库和网络设备在内的各种IT基础设施,同时可以通过Neotys云平台发起外部压力。

官网链接:http://www.neotys.com/product/overview-neoload.html

5、WebLOAD(商用版)

WebLOAD是来自Radview公司的负载测试工具,它可被用以测试系统性能和弹性,也可被用于正确性验证(验证返回结果的正确性)。其测试脚本是用Javascript(和集成的COM/Java对象)编写的,并支持多种协议,如Web(包括AJAX在内的REST/HTTP)、SOAP/XML及其他可从脚本调用的协议如FTP、SMTP等,因而可从所有层面对应用程序进行测试。

WebLOAD存在免费和专业两个版本,免费版本支持50个虚拟用户,专业版还提供更多的报告和协议供用户选择。WebLOAD通常用作QA团队的独立运行工具,在开发周期的验证阶段,被测系统(System Under Test,SUT)投入实用之前,在模拟环境中对被测系统进行测试。

官网链接:http://www.radview.com/

6、Loadster(商用版本)

是一款商用负载测试软件,用于测试高负载下网站、Web应用、Web服务的性能表现,支持Linux,Mac和Windows等运行环境。

Loadster能够对Web应用/服务的Cookies、线程、头文件、动态表格等元素发起测试,获得Web在压力下的性能、弹性、稳定性和可扩展性等方面的表现。

官网链接:http://www.loadsterperformance.com/

7、Loadstorm(商用版本)

Loadstorm是一款针对Web应用的云端负载测试工具,通过模拟海量点击来测试Web应用在大负载下的性能表现。由于采用了云资源,所以Loadstorm的测试成本非常低,用户可以在云端选择创建自己的测试计划,测试标准和测试场景。

Loadstorm最多可以生成多达50000个并发用户,通过数以千计的云服务器发起访问。使用Loadstorm不需要任何脚本知识,同时提供多样化的测试图表和报告模版,用于准确测量Web应用的各项性能指标,如错误率,平均响应时间和用户数量等。Loadstorm可以申请免费试用,但更多压力和功能需要开通高级帐户。

官网链接:http://loadstorm.com/

8、Load impact(免费使用)

是一个在线可以免费测试网站负载能力,它就可以满足你的基本要求, 当然成为他的付费用户测试的项目将会更多。

Load impact是一款服务于DevOps的性能测试工具,支持各种平台的网站、Web应用、移动应用和API测试。Loadimpact可以帮助用户了解应用的最高在线用户访问量,通过模拟测试不同在线人数下网站的响应时间,估算出服务器的最大负载。

Load impact的使用非常简单,只需要输入网址进行测试,便可统计出加载网站的一些详细数据。包括整体加载和站内图片,javascript, CSS等代码载入。可以在右侧列表选择不同文件来同时对比最多三个对象的加载数据,并生成图表显示,方便网站设计者来分析。测试完成之后,网站还可以存储测试过的统计数据。

官网链接:http://loadimpact.com/

特别提醒:

1.由于此测试数据发生在国外,一般反映出的是国外用户访问您要测试的网站的速度参数,具有一定的参考性;

2.对于国内主机,并且主要客户来自于国内的用户来说请慎重将此数据作为依据。

9.locust(开源免费)

Locust 完全基本 Python 编程语言,采用 Pure Python 描述测试脚本,并且 HTTP 请求完全基于 Requests 库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。但是需要手工编写脚本,有一定的难度

10.OpenSTA(开源免费)

OpenSTA是一个免费的、开放源代码的web性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网站。其还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过proxy 的一切HTTP/S traffic。通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析。

总结

商用性能工具在易用性(脚本生成)、并发模型、统计指标上要比开源免费软件要好很多,可以大大提高工作效率,降低使用难度,在统计指标上要丰富的多。

免费开源软件的优点就是免费,不用花钱。但使用难度大,统计指标少,在仿真能力上比较弱。

如何选择主要看使用者的经济能力和使用频度。如果是使用频繁,免费的软件实际使用成本比商用软件还要贵。


Bug的priority()和severity()是两个重要属性,通常人员在提交bug的时候,只定义severity,而将priority交给leader定义,通常bug管理中,severity分为四个等级blocker、critical、major、minor/trivial,而priority分为五个等级immediate、urgent、high、normal、low。

Serverity(严重程度)

1、Blocker(崩溃):阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等。(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)

2、Critical(严重):系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等。(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)

 3、Major(一般、界面、性能缺陷、兼容性):功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等。(该问题实际测试中存在最多,合理安排解决Bug,解决率关系版本的优化程度) 

 4、Minor/Trivial(次要、易用性及建议性问题):界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等。(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)

Priority(优先级)

1、Immediate(马上解决):表示问题必须马上解决,否则系统根本无法达到预定的需求。

2、Urgent(急需解决):表示问题的修复很紧要,很急迫,关系到系统的主要功能模块能否正常。 

3、High(高度重视):表示有时间就要马上解决,否则系统偏离需求较大或预定功能不能正常实现。

4、Normal(正常处理):进入个人计划解决,表示问题不影响需求的实现,但是影响其他使用方面,比如页面调用出错,调用了错误的等。

5、Low(低优先级):即问题在系统发布以前必须确认解决或确认可以不予解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值