开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:消息队列和应用工具产品体系-性能测试场景和工具】
课程地址:https://edu.aliyun.com/course/3112075/lesson/19045
消息队列和应用工具产品体系-性能测试场景和工具
内容介绍:
一、软件测试的基本方法
二、性能压试的使用场景
三、常见压测工具比较
一、 软件测试的基本方法
通过测试找出程序中的错误和缺陷,是保证软件质量和可用性的重要手段和先决条件。
软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。在整个软件的生命周期中,软件测试都会伴随其中,并不是在软件开发完成后才进行。在项目开发期,项目的集成阶段到项目的上线阶段开发者一般都要进行几种重要的测试方法。
测试按生命周期主要分为:
开发阶段
1. 单元测试
单元测试是指对软件中最小可测试的单元进行检查和验证。当开发人员完成一段代码后。或由白盒测试工程师或开发人员自己进行代码功能的测试。测试者会先静态的观察代码是否符合规范,然后动态的运行一下代码,检查运行的结果。目前大部分公司的单元测试都由开发人员通过简单的编译和调试一下自己的程序进行测试,并没有相应的单元测试计划。
2.集成测试
集成测试是单元测试的下一个阶段,是指将通过测试的单元模块组装成系统或子系统在进行测试,重点测试的是不同模块的接口部分。集成测试也是由白盒测试工程师或开发人员来完成的。
系统集成阶段
1.系统测试
当系统功能完全开发完毕后,项目会进入集成阶段。在这个阶段,系统测试是指将整个软件看作一个整体进行测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。前期主要测试系统的功能是否满足需求后期主要测试系统的运行是否满足需求,以及系统在不同的软硬件环境中的兼容度。
2.安全测试
安全测试是指产品开发基本完成至发布的阶段,对产品进行渗透性和侵入性的攻击,以检验产品是否符合企业的安全需求以及是否存在安全隐患的测试过程。
3.性能测试
性能测试又可以分为负载测试、压力测试、并发测试、配置测试以及可靠性测试。
(1)负载测试是指测试当负载逐渐增加时,系统各项性能指标的变化情况
(2)压力测试是指通过给系统不断增加并发压力来获得系统能提供的最大服务级别的测试。
(3)并发测试是通过模拟用户并发访问,测试多个用户并发访问同一个软件、同一个模块或数据记录时是否存在死锁等性能问题。
(4)配置测试是通过对被测试系统环境的调整,了解各种不同的配置方法对软件系统的性能影响的程度,从而找到系统各项资源的最优分配原则。
(5)可靠性测试是在给系统加载一定业务压力的情况下,使系统运行一段时间,以检测系统是否稳定。
上线阶段
1.灰度上线测试
灰度上线测试是指将准备上线的产品首先先在小范围的目标人群中进行使用,通过他们的使用结果和反馈来验证产品是否存在不足或bug,从而做到以真实的生产环境来验证产品的目的,避免因为产品的使用环境不同导致某些特定的错误被掩盖的情况发生。
2. 回归测试
回归测试是指当开发者因为版本升级修改了应用代码之后,重新执行上一个版本的应用功能测试,以确认代码的修改没有引入新的错误或导致其他代码产生错误的测试手段。对于频繁升级的互联网应用来说,回归测试的频率和重要性相相比传统的应用场景会高得很多,在互联网场景中,高并发场景下的系统可用性是企业级应用时刻需要面对的重要问题,稍有不慎就会导致应用的不可用。
有如下两个示例,2009年的淘宝双11大促当天,由于订单数量过大,付款时间过于集中,导致多家与淘宝合作的银行后台系统发生了宕机。
在春运期间,12306购票网站由于激增的用户量和复杂的车票购买业务逻辑,导致12306的系统资源迅速被消耗,引发了应用不可用。同时,根据数据分析,互联网应用的响应时间每慢100毫秒,电商网站的交易额就会下降1%。因此,在应用的整个生命周期中,为了避免高并发造成的应用不可用和响应速度变慢,在新系统上线、技术升级、业务峰值保障、站点容量规划以及性能瓶颈探测等五个场景中,都会使用性能压测来对系统的高并发性能进行验证。下面简单介绍一下这五个场景下性能测试的重要性。
二、 性能压试的使用场景
性能压测的目标是模拟真实的业务场景,而通常业务场景是复杂多变的。因此有效的性能压测对系统的稳定性具有重要的指导意义,是系统生命周期中不可或缺的一部分。
1.新系统上线时
在新系统上线时,通过执行性能压测,能使开发者对系统的负载能力有比较清晰的认时,再结合预估的潜在用户数,保障系统上线后的用户体验。
2.在技术升级时
在技术升级时,在系统重构的过程中,通过性能压测的通过性能压测的对比,可以有效验证新技术的高效性,指导系统的重构。
3 在业务峰值来临时
在业务峰值来临时,通过充分的性能压测,可以确保大促活动等峰值业务的稳定性,保证峰值业务不受损失
4.在站点容量规划时
在站点容量规划时,通过性能压测可以实现对站点精细化的容量规划,指导分布式系统计算资源的分配。
5.在性能平静探测时
在性能瓶颈探测时,通过性能压测探测系统中的性能瓶颈点,进行有针对的优化,从而提高系统的整体性能。
综上所述,性能压测伴随着系统的开发、重构、上线到优化的整个生命周期,因此,有效的性能压测对系统的稳定性具有非常重要的指导意义,是系统生命周期中不可或缺的一环。
三、 常见压测工具比较
|
学习部署成本 |
支持多协议 |
图形化展示结果 |
支持PTS模式 |
链路场景编排管理 |
支持场景录制 |
工具特点总结 |
Apache Bench |
学习成本低 开源系统 |
否 |
否 |
否 |
否 |
否 |
命令行测工具,功能简单,无法应用于生产环境 |
LAOD RUNNER |
学习成本高 商用系统 |
是 |
是 |
否 |
是 |
是 |
商业软件,但学习成本过高,支持的协议有限,不适合复杂的性能压测环境 |
JMeter |
学习成本高 开源系统 |
是 |
是 |
否 |
是 |
是 |
热门性能压测工具,逐渐替代Load runner ,但学习维护成本高,难以应用于大型复杂的性能压测场景 |
阿里云PTS |
学习成本低 商用系统 |
是 |
是 |
是 |
是 |
是 |
云服务工具,较低的学习成本,功能丰富,JMeter用户能够快速迁移至PTS |
1. Apache Bench
Apache Bench 是一款用来针对 http 协议做性能压测的命令行工具,支持在本地环境中发起测试请求,验证服务器的处理性能。它主要有以下特点,作为一款开源工具,而 Apache Bench 拥有比较好的扩展性,测试人员可以基于自身的需求对其进行二次开发。使用 Apache Bench 时,可以通过指定性能压测产生的总请求数、并发数或压测时长控制性能压测。但是 Apache Bench 也存在一些缺点,如无图形化界面支持,只支持 HTTP 协议,缺少对Http协议、web socket等协议的支持,对于比较复杂的性能压测场景,缺少链路编排、场景管理等功能,同时只能够对单一地址发起性能压测。此外,它的性能压测统计指标维度较少,缺少性能压测过程中的数据统计,只能够在压测结束后获取相关的统计数据,无法实时获取系统负载等指标。难以应用于生产环境下的性能压测。
2. LOAD RUNNER
LOAD RUNNER 是一款发布于1993年11月的性能压测测试工具,通过模拟成千上万用户实施并发负载及实时监控的方式来确认和查找应用中的问题。作为一款历史悠久的商业性性能压测工具,LOAD RUNNER 能够对整个企业级架构进行测试。可以适用于各种架构体系的自动负载测试,能预测系统的行为并评估系统的性能。LOAD RUNNER 对性能压测有着比较系统性的支持,结合多个组件的功能特性,用户可以比较方便的设计复杂背景下的性能压缩场景,例如结合场景设计设置虚拟用户数量、设置执行时间等。结合虚拟用户生成器,实现复杂链路场景的高效设计编排。此外,LOAD RUNNER支持设置思考点、集合点,还可以结合分析器实现压测报告统计数据分析指标的可视化,助力测试人员理解性能压测的结果。但是LOAD RUNNER 作为一款商业软件,价格比较高,而且需要本地安装,安装过程也较为复杂,在实际设计、执行压测时需要编写相应的脚本,对于使用人员来说学习成本较高。同时LOAD RUNNER支持的协议有限,缺少监控、告警等知识,性能压缩中难以实时发现问题,不适合复杂的性能压测环境。
3. APACHE J Meter
APACHE J Meter 是APACHE 组织开发的基于JAVA 的性能测试工具,它能对应用程序做功能测试和回归测试。使用者可以创建带有断言的脚本。并通过脚本来验证程序的返回结果来确定满足设计期望,
同时JMeter 允许使用正则表达式创建断言,并支持对性能压缩结果做图形化分析。作为一款时下热门的开源性能测试工具,根据谷歌的搜索指数显示,JMeter 已经逐渐展现出了替代LOAD RUNNING 的趋势。JMeter 作为一款开源软件,其扩展性相当强,同时具有强大的开源社区支持,社区内的开发者活跃度较高。也正是在开源设计的积极发展下,JMeter 具有性能压测的诸多特性,如支持场景编排、断言设置、支持对多种资源施压、有图形化界面支持,支持脚本录入,使用人员能够较为简单的设计并发起性能压测。此外,JMeter 提供资源监控、性能压测、报告生成等功能。但是在需要高负载的场景下,JMeter 需要部署分布式环境,部署成本比较高,在使用时需要编写相应的脚本,而每个脚本只能保留一个测试用例,学习门槛居高不下的同时也不利于脚本的维护。此外,它缺少监控、告警等支持,在性能压缩过程中,使用人员难以借助JMeter 实时发现问题,难以应用于大型复杂的性能压缩场景。
4. 阿里云PTS
性能压测服务简称PTS,是阿里云下的SAS 性能测试平台,提供场景API 编排功能,结合阿里云自研的平台和引擎,支持按需设定压测模式、压测量级、压测时间、快速发起压测、监控压测过程并生成压测报告等功能,同时也兼容开源工具JMeter 。总体来说,阿里云PTS 作为一款云服务产品,用户可以以较低的学习成本快速借助PTS发起压测。对于阿里云的用户来说,PTS能够解密结合现有的阿里云服务,提供全方位的压测报告,供用户快速定位性能瓶颈,对于JMeter 用户也能够以较低的成本迁移至PTS,享受PTS 的高阶功能。