发表于: 2021-03-18 22:57:53

1 1273


今天完成的事情:
了解负载测试、压力测试和性能测试的异同

在本地压测



明天计划的事情:
模拟数据穿透缓存的情况
部署两台WEB,使用Nginx的Upstream来做负载。

在服务器上压测



遇到的问题:

暂无



收获:


负载测试、压力测试和性能测试的异同




先来说一说,为什么要进行测试?



测试的目的是为了在上线之前,找出各个阶段的问题。比如:代码问题,服务器的问题,硬件的问题等等


============
============

我们知道,软件总是运行在一定的环境下,这种环境包括支撑软件运行的软硬件环境和影响软件运行的外部条件。为了让客户使用软件系统感到满意,必须确保系统运行良好,达到高安全、高可靠和高性能。其中,系统是否具有高性能的运行特征,不仅取决于系统本身的设计和程序算法,而且取决于系统的运行环境。系统的运行环境会依赖于一些关键因素,例如:


系统架构,如分布式服务器集群还是集中式主机系统等。


硬件配置,如服务器的配置,CPU、内存等配置越高,系统的性能会越好。


网络带宽,随着带宽的提高,客户端访问服务器的速度会有较大的改善。


支撑软件的选定,如选定不同的数据库管理系统(Oracle、MySQL等)和web应用服务器
(Tomcat、GlassFish、Jboss、WebLogic等),对应用系统的性能都有影响。

外部负载,同时有多少个用户连接、用户上载文件大小、数据库中的记录数等都会对系统的性能有影响。一般来说,系统负载越大,系统的性能会降低。



     从上面可以看出,使系统的性能达到一个最好的状态,不仅通过对处在特定环境下的系统进行测试以完成相关的验证,而且往往要根据测试的结果,对系统的设计、代码和配置等进行调整,提高系统的性能。许多时候,系统性能的改善是测试、调整、再测试、再调整、……一个持续改进的过程,这就是我们经常说的性能调优(perormance tuning)



在了解了这样一个背景之后,就比较容易理解为什么在性能测试中常常要谈负载测试。



       从测试的目的出发、从用户的需求出发,就比较容易区分性能测试、负载测试和压力测试


性能测试是为了获得系统在某种特定的条件(之前使用的测试,一直没有区分压力测试和性能测试的区别,挺随意的)下(包括特定的负载条件下)的性能指标数据,而负载测试、压力测试是为了发现软件系统中所存在的问题,包括性能瓶颈、内存泄漏等。


通过负载测试:也是为了获得系统正常工作时所能承受的最大负载,这时负载测试就成为容量测试。


通过压力测试:可以知道在什么极限情况下系统会崩溃、系统是否具有自我恢复性等,但更多的是为了确定系统的稳定性


     那么,如何给负载测试、压力测试下个定义呢?根据上述讨论,我们可以给出如下的定义:


负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。负载测试更多地体现了一种方法或一种技术。


压力测试是在强负载(大数据量、大量并发用户等)下的测试,查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。


       压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。


压力测试可以被看作是负载测试的一种,即高负载下的负载测试,或者说压力测试采用负载测试技术。通过压力测试,可以更快地发现内存泄漏问题,还可以更快地发现影响系统稳定性的问题。


       例子:某个电子商务网站的订单提交功能,在10个并发用户时错误率是零,在50个并发用户时错误率是1%,而在200个并发用户时错误率是20%。



================

负载测试和压力测试的区别


        负载测试是为了发现缺陷,而性能测试是为了获取性能指标。因为性能测试过程中,也可以不调整负载,而是在同样负载情况下改变系统的结构、改变算法、改变硬件配置等等来得到性能指标数据


       尽管性能测试和负载测试看起来很相似,但它们的目标是不同的。一方面,性能测试使用负载测试技术和工具进行测量和基准测试,并使用不同的负载级别。性能测试的目的不是发现错误,而是消除瓶颈,为未来的回归测试/服务建立基准。另一方面,负载测试工作在一个预定义的负载级别,通常是系统在正常运行时可以接受的最高负载。请注意,负载测试的目的不是通过压倒系统来破坏系统,而是试图让系统像一台运转良好的机器一样不断地运转



      综合所述,负载测试、压力测试和性能测试的概念可以概括如下:

      负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。负载测试是一种测试方法,可以为性能测试、压力测试所采用。负载测试的加载方式也有很多种,可以根据测试需要来选择。


      性能测试是为获取或验证系统性能指标而进行测试。多数情况下,性能测试会在不同负载情况下进行。


      压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。



在贴两篇博客,有关压力测试和性能测试更详细的例子



=============
=============

来进行压力测试:


注:本地测试,缓存都是用的Redis


线程设置如下:



excellentStudent有缓存,JSP和Json对比:

excellentStudent无缓存,JSP和Json对比:

profession无缓存,JSP和Json对比:

profession有缓存,JSP和Json对比:

    

对比结果:发现profession有无缓存,吞吐量没有多大的变化。这不对,觉得应该是登录请求卡在了中间,是不是两个请求一起算了。禁用登录,试试看



禁用登录请求之后:上升明显



excellentStudent无缓存,JSP和Json对比:



excellentStudent有缓存,JSP和Json对比:




profession有缓存,JSP和Json对比:

profession无缓存,JSP和Json对比:

总结:平均值大概有缓存和无缓存相差50ms,基本可忽略不计。吞吐量相差  5.0/sec
===========
===========



返回列表 返回列表
评论

    分享到