如何在智能告警平台CA触发测试告警
1047
2022-12-14
本篇文章给大家谈谈压力测试负载测试并发测试,以及压力测试 负载测试对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享压力测试负载测试并发测试的知识,其中也会对压力测试 负载测试进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、压力测试、负载测试和并发测试有什么区别?
2、压力测试、负载测试、并发测试的区别是什么?
3、性能测试、负载测试、压力测试有什么区别
4、性能测试包括哪些方面
5、压力测试和负载测试的区别
6、测试开发技术(二)——压力测试
主要区别是压力测试负载测试并发测试,性质不同、目压力测试负载测试并发测试的不同、特点不同,具体如下压力测试负载测试并发测试:
一、性质不同
1、压力测试
压力测试是在强负载(大数据量、大量并发用户等)下的测试,查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。压力测试可以被看作是负载测试的一种,即高负载下的负载测试,或者说压力测试采用负载测试技术。
2、负载测试
负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。负载测试更多地体现压力测试负载测试并发测试了一种方法或一种技术。
3、并发测试
指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题,几乎所有的性能测试都会涉及并发测试。
二、目的不同
1、压力测试
目的是在软件投入使用以前或软件负载达到极限以前,通过执行可重复的负载测试,了解系统可靠性、性能瓶颈等,以提高软件系统的可靠性、稳定性,减少系统的宕机时间和因此带来的损失。
2、负载测试
负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征。例如,响应时间、事务处理速率和其压力测试负载测试并发测试他与时间相关的方面。
3、并发测试
测试目的并非为了获得性能指标,而是为了发现并发引起的问题。
三、特点不同
1、压力测试
压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。
2、负载测试
负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。
3、并发测试
在具体的性能测试工作中,并发用户往往都是借助工具来模拟的,例如LoadRunner性能测试工具中叫做虚拟用户,因为实际情况中去实现同时多人并发的测试环境要求比较高而测试成本高、测试时间也是比较长。
压力测试、负载测试、并发测试都是性能测试的一种类型。
压力测试往往强调的是某性能指标的最大值压力测试负载测试并发测试,可能已经超过实际的期望值,可能已经是不合理的区间压力测试负载测试并发测试了。
负载测试强调的是性能指标在期望区间内。
关于这两个测试的说法网上存在各种相互冲突的说法,百度百科和知乎的都不一样,建议采用百度百科的解释。
并发测试只有特定的应用场景才使用,比如抢红包,主要测试线程锁和资源争抢冲突的。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。\x0d\x0a负载测试和压力测试都属于性能测试,两者可以结合进行。\x0d\x0a负载测试,通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。\x0d\x0a负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。\x0d\x0a压力测试,也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。
性能测试包括负载测试和压力测试。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。中国软件评测中心将性能测试概括为三个方面:应用在客户端性能的测试、应用在网络上性能的测试和应用在服务器端性能的测试。通常情况下,三方面有效、合理的结合,可以达到对系统性能全面的分析和瓶颈的预测。
性能测试分为两种维度:访问时间和并发量;
负载测试是从并发量维度出发,不断增加并发量的情况下,系统的性能指标;
压力测试是从访问时间维度出发,在并发量一定的情况下,不断增加连续访问的时间,系统的性能指标;
负载测试的目标是测试在一定负载情况下,系统的性能;(这里不关注稳定性,也就是说不关注长时间运行,只是得到不同负载下相关性能指标即可;)实际中,我们常从较小的负载开始,逐渐增加模拟用户用户的数量,观察不同负载下,系统的响应时间,所耗资源,直到超时或关系资源耗尽,这就是所说的负载测试;
压力测试的目标是测试在一定负载的情况下,系统长时间运行时的稳定性。比如我们经常利用脚本或工具事先吃掉服务器的一部分CPU、内存或带宽等,创造出一定的负载环境并测试此时系统的事务处理能力,响应时间等等。压力测试尤其关注大业务量情况下长时间运行系统时,系统性能的变化(例如是否反应变慢,是否会内存泄漏导致系统逐渐崩溃);
打个比喻:
一位服务员,就相当于咱们的应用系统;
负载测试就是在单位时间内逐步加大这位服务器的工作量,看看此服务员在不同的工作量下完成工作的速度和质量,从而了解该服务员的工作能力;
压力测试就是给这位服务员外部压力,比如长时间不让他休息,不给开工资等,看看服务员会不会好好工作(能否及时响应请求),或者罢工之类的;
上一篇文章里说过,目前互联网公司的测试开发岗位分两类。多数的一类是既要负责业务测试、自动化测试,同时也要去开发测试框架、效率工具来辅助业务测试。这类测试开发的岗位(主要指后端的岗位)一般多少都要接触压力测试。
压力测试、性能测试、负载测试、稳定性测试在网络上有很多文章介绍概念和区别,通常在项目过程中不会区分那么多,实际项目中都是以目标为导向,通常实际项目中都会说,压测一下看下性能,所以这里就不管详细的概念和区别了。为了好理解,我们这里统一叫压测,并以得到性能数据为性能测试,以观察稳定性为稳定性测试。
性能测试和稳定性测试的相同之处在于都是使用压测工具来进行。但目标不同,性能测试是通过压力测试得到系统的极限性能或者和上一版本的性能对比数据。而稳定性测试则是通过压力测试提供稳定或者变化的持续流量,来观察系统持续运行的情况下是否存在异常。
正常情况下,一般系统先做性能测试,拿到极限性能或者性能对比数据(对于非1.0项目,性能数据一般需要和上一个版本对比)之后,再通过安全的流量持续压测更长时间,来完成稳定性的验证。
下面我们就具体介绍一下怎么做性能测试和稳定性测试。
性能测试的第一步要确定目标,就是为什么要做性能测试,要达到什么样的目标或者效果。比如某个首次上线的系统,性能测试主要是为了得到系统的极限性能数据;再比如,系统优化,更换了RPC协议或者消息队列,性能测试就是为了量化此次系统优化在性能上优化的效果。另外,也不是所有的项目都需要性能测试,比如一个内部系统,用户数和流量本身就很少,而且在未来一段时间也不会有增量,这就基本不需要性能测试。
如果是从无到有的1.0项目,因为项目还没有上线,所以只能评经验来预估线上的流量数据;但如果是非1.0项目,就可以收集当前的线上数据。具体收集的数据如下(仅供参考,要按照实际情况来调整):1)被测系统或模块各类请求流量比例;2)系统或模块目前平均、峰值、最小 qps;3)线上部署方式和规模;4)被测系统或模块依赖能承受的QPS或者容量。
确定目标和收集完线上现有数据之后,需要根据目标和现有数据确定压测方案,比如,每个阶段通过多大并发或者流量来压测、分几个阶段、每个阶段多长时间、以及压测过程中需要观察和记录哪些数据等。
同时,也要准备压测环境,压测的环境要尽可能的和线上一致,如果达不到,就做等比缩放。比如,一个系统有A、B两个模块组成,线上A部署了20台机器,B部署了5台机器,那么压测就可以A部署4台,B部署1台。机器和实例的数量只是一个方面,同时也要考虑机器的性能(CPU盒数、内存、磁盘、网卡等),还要考虑依赖方(如DB、缓存、消息队列等)的部署。部署压测环境的核心思路就是要用这套环境反应出线上环境的真实情况。
要进行压力测试就一定要有压测工具,一般来说压测http或者其他开源协议可以在网上找到现成的工具,比如jmater之类的。但如果场景比较特殊,或者使用的是公司或项目的私有协议,就只能使用公司内部的工具或者自己动手开发了。
选择好压测工具就要构造压测数据了。构造压测数据主要分两点:
第一点是要构造压测环境系统中的数据。因为线上系统内部一定是有一定数据的,我们要尽量模拟线上就要在系统中添加相应的数据。
另一点就是要准备压测的请求数据。这点跟选择的压测工具有关,一般来说分2种:
1)数据词典, 压测的请求提前准备好,存入文件、DB或缓存里,数据量较大的时候一般需要写程序生成。
2)实时生成,这种是压测工具在压测的时候根据配置规则来实时随机生成请求。
准备工作一切就绪,下一步就开始做压测的执行。这时候主要就是根据压测方案的从低到高去调整压测工具的并发数或请求数,来对目标系统或模块进行压测。
压测时,要观察CPU、内存、网络IO、磁盘空间、被压目标日志、依赖系统或者模块的状态等数,也要记录不同并发下目标系统或者模块处理请求的QPS和响应时间。同时也要注意有没有内存泄漏、句柄泄漏、系统崩溃等问题。
实际上部分数据在记录的过程中就可以初步整理出来。这里要针对上一步记录的数据,进行汇总,主要要产出在不同并发下,上面提到的数据都是什么情况。需要根据数据判断出极限性能,找到这种部署情况下瓶颈在哪,以及是什么原因造成的,为后续扩容提供依据。有些情况还需要跟以前的数据做对比,看性能提升或者下降的程度是不是符合预期。最后,把这些信息综合汇总、分析之后,产出性能测试的报告。
通常性能测试之后拿到了性能数据之后,都会在安全的并发或者流量下持续压测更长的时间来确保服务的稳定性。比如,笔者通常测试性能的时候,每轮可能压测半小时到一小时(在刚开始并发或者流量较小的时候可能会更短),在得到期限性能之后,会控制极限性能时80%-%90的流量或者并发去压测更长的时间,这个时间一般会比较长,而且多数情况下会在晚上下班前启动,然后第二天到公司来看结果。
除了长时间通过安全流量来验证外,有些时候在特殊场景下,也需要验证在安全流量范围内,流量急曾或者急降的情况下,稳定性是否有影响。或者,验证在一定流量下,模拟某个依赖或者系统内部的模块出现问题,执行相应预案时,对系统整体的影响是否符合预期。
当然,稳定性很多情况是异常,但更多的异常会在异常测试里去做,这里的稳定性测试是指在一定流量压力下的稳定性测试,其他的就不做讨论了。
上面介绍了压力测试里,性能测试和稳定性测试要做什么,那具体怎么做呢?下面我们就通过一个实例来简单介绍一下。
一个消息推送的系统,推送的消息就是我们日常手机APP的通知消息。这个消息通知的系统有三个接口,分别是单播(指定推送给某个人)、组播(推送给一个组,组里可能有多个人)、广播(推送给APP所有用户)。现在这个系统做了一个重构,更新了内部交互的RPC协议,所以要压一下,跟之前的性能数据做个对比。另外,系统重构前,线上集群极限性能为30000 QPS。
下面,我们就按照前面的步骤,来简单介绍一下具体怎么做。
目标就是要得到重构后的系统性能数据,并和原有的做对比,原有的极限性能已知,大概在30000 QPS左右。
收集线上数据,比如说我们收集到单播、组播、广播的请求比例为5:78:1;组内人数大概在300-1000;发送的消息字符数在30-100这个区间。
压测方案要先确定部署方案,比如这个系统向上是20台机器(或者实例),压测采用2台机器(等比缩放)。压测机器是线上的1/10,所以我们的目标性能就是3000qps。那么我们压测的方案就可以如下设置:
第一轮,2个并发,5-10分钟,主要目的是为了先验证环境和压测工具没有问题;
第二轮,根据上一轮并发数和机器资源(CPU、内存、IO)的情况,调整并发到极限的一半多一些(比如,之前是2个并发,CPU占用10%左右,内存、IO占用都很小,那么就以CPU的占用作为参考来计算,1个并发大概占用5%,那我们就可以吧并发调到10-12,目标CPU占用是50-60%)。这其实才真正开始压测,如果没问题,就开始逐步加压;
第三轮,开始逐步增加,按照实际情况一次增加2-5个并发,直到性能达到瓶颈。
这里是假设压测工具通过调整并发数来操作压力,主要需要看下并发对系统CPU、内存、IO的影响,根据压测时机器的资源占用信息来判断增加多少并发。
确定好方案,就需要部署压测环境了,这里要注意,尽量使用跟线上一致配置的机器。
压测工具要根据实际业务做选择,必要的时候需要自己开发,工具开发后面如果有机会在其他的文章里介绍,这里就不多介绍了。我们这个例子因为是系统更换内部协议,对外接口不变,所以可以使用原有压测工具。
下面就是要构造数据:
首先,要构造系统内部的数据,比如用户信息、设备信息、组信息,这里既要根据线上的收集到的信息来构造,比如用户数、组的数量、组内用户数等。这类如果方便的话可以直接在DB里插入,或者掉相应的系统API来准备。
然后就是压测的请求数据,比如说压测工具是用数据词典来压测,那么这里我们就通过脚本,来生成压测请求数据。这里要注意线上收集到的各个接口的占比,即5:78:1。压测的时候按照这个比例来提供流量。
准备工作完成,开始做压测。
这时候要先吧各类数据观察准备好,一般现在的互联网大厂都有图形化的工具来看,如果没有也可以通过linux的一些命令来看。常用的命令有top\ps\vmstat, 这里推荐使用top来查看实时的资源情况,使用vmstat的来定时输出当资源情况(vmstat -t 1 就是每秒输出一次)。
准备好了观测,那就启动压测工具,按照方案压测。压测方案上面已经介绍,这里就不重复了。
假如我们并发加到20个的时候,CPU占用达到85%左右,处理请求达到3600qps,其他资源占用都不足机器的一半;并发加到22个的时候,CPU占用达到95-100,处理请求是3700qps;并发加到24,CPU打满,处理请求3800QPS,并且出现错误日志。这时候就可以停止压测了。
数据整理,我们首先要整理一个表格或者图标,我们这里用表格:
这个表格就是压测产出的最核心的数据,由于CPU是明显的性能瓶颈,表格里就不体现其他资源了,如果其他资源使用率也比较高,也要放到这个表格里,又或者瓶颈在外部依赖,也要体现出来。通过这个数据可以看出,3700QPS就是系统处理的极限,安全的流量在3600QPS。这时候就可以用17-20的并发数,长时间压测压测一下,看看系统整体的稳定性。
那么性能报告怎么写呢?下面就给出一个比较简单的性能报告样例。
标题:消息推送RPC协议升级性能测试报告
一、项目背景
这里写项目背景和目标
二、压测环境
线上20台物理机,压测环境使用2台物理机,配置与线上一致,具体如下:
XX核,XXG内存,万兆网卡,硬盘 400G * 6 SSD
DB:XX主XX从XX备
三、压测方案和数据
1. 请求比例
单播:组播:广播 = 5:78:1
2. 压测过程数据
3. 资源占用图
可以把QPS和CPU占用使用工具(比如excel)生成一个折线图,另外,可以把其他资源数占用的数据图片贴一下。
四、结论
压测过程中,压力达到3700qp时,内存与IO正常,CPU占用达到98%,无错误日志。压力达到3800qps时CPU打满,且5分钟后开始出现错误日志。因此系统在2台物理机部署极限性能为3700qps,性能瓶颈在CPU,预计线上20台机器极限性能为37000qps.
系统RPC协议升级前20台机器30000qps,升级后预计能达到37000qps,性能整体提升23%,符合预期。
上面就是一个比较简单的报告,真实项目中瓶颈不一定是CPU,可能是其他资源,也可能是依赖的系统或者模块,这些都需要观察和分析压测中的数据来得出。
压力测试是后端测试和测试开发人员的必备技能,这篇文章只是根据笔者的经验针对压力测试进行的总结,不能覆盖所有压测场景,仅给大家做个参考。更多的是需要我们根据系统的实际情况去探索和实践。 关于压力测试负载测试并发测试和压力测试 负载测试的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 压力测试负载测试并发测试的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于压力测试 负载测试、压力测试负载测试并发测试的信息别忘了在本站进行查找喔。
发表评论
暂时没有评论,来抢沙发吧~