【.com原稿】性能测试旨在检查应用程序或软件在特定负载下工作时的响应性和稳定性,从而检测应用/软件在响应速度、可扩展性和稳定性方面是否满足预期要求。ImageviaPexels简而言之,性能测试的目标是识别和消除应用程序中的性能瓶颈。本文将为您详细介绍性能测试的主要类型、性能测试流程规划、如何针对项目进行性能测试策略、如何设计不同场景下的性能测试用例,助您远离性能测试的盲点。性能测试的类型性能测试主要有四种类型:[负载测试]、[压力测试]、[容量测试]和[可靠性/可恢复性测试]。下面将一一介绍四大性能测试类别。:负载测试负载测试用于测试应用程序在正常和峰值条件下的性能。在负载测试中,我们对应用性能的判断主要是基于应用对用户请求的响应以及在不同负载变化下(在可接受的水平内)的一致响应能力。负载测试中的核心问题:应用程序在出现异常之前可以处理的最大负载是多少?在系统变慢或崩溃之前,数据库可以处理多少数据?是是否有任何与网络相关的问题需要解决?压力测试压力测试旨在找到破坏系统的方法。该测试还使我们能够找到系统可以承受的最大负载范围。通常,压力测试采用增量方式,通过逐渐增加负载来观察系统各项性能指标的变化。首先,我们可以从应用程序上已经测试过的负载开始(例如,当前用户数是100);然后慢慢增加更多的负载来给系统施加压力(例如,从100个用户增加到10,000个)。当我们发现服务器没有响应请求时,这个点就被认为是一个断点(在一些性能测试报告图表中,往往被认为是一个性能拐点)。在压力测试中,我们需要注意以下问题:系统在崩溃前能承受的最大负载是多少?压力测试时系统是如何崩溃的?系统崩溃后能否自行恢复?被测系统/应用在处理异常负载时中断的方式有哪些?容量测试容量测试是为了验证应用程序的性能不受应用程序正在处理的数据量的影响。为了进行容量测试,需要向数据库中输入大量数据。这样的测试可以被认为是增量测试或稳定性测试。在增量测试中,数据量是逐渐增加的。通常,随着应用程序的使用,数据库容量会随着数据的增加而增长,比如一个新成立的教育网站,最初只需要存储少量数据,但5-10年后,网站中的数据存储量就会增加。数据库已满有相当大的规模。因此,当数据量逐渐增加到大规模时,需要测试应用程序的容量。此外,容量测试还有另外一个含义:在正常和峰值负载情况下,应用能否满足当前的业务量需求?这通常是对系统未来可能面临的情况进行的可预测性测试,需要包含考察的核心点是:应用是否能够支持未来的负载?环境能否应对即将到来的负载增加?需要哪些额外资源才能使环境具备足够的能力?为确保Web应用支持And/or交易数量,满足性能要求,我们需要在测试过程中考虑修改处理器容量、网络带宽、内存使用、磁盘容量等资源以满足目标。网上银行能力测试的实施就是一个典型案例。可靠性/可恢复性测试可靠性测试或恢复测试用于验证应用程序在发生故障或异常行为后能否恢复到正常状态,以及恢复阶段需要多长时间。例如,如果一个在线交易网站出现故障,导致用户在一天中的某个时间点(高峰时间)无法买卖股票,但在一两个小时后用户可以在线交易股票,我们可以说该应用程序是可靠,即能够自行从异常行为中恢复过来。性能测试流程大多数测试工程师都对功能测试进度计划感到满意,但是当被问及如何进行性能测试时,他们往往会陷入沉默。原因不外乎两点:几乎没有实战经验缺乏对性能测试的整体认识下面将系统地介绍性能测试的标准化流程:性能需求收集&分析直接影响后续性能测试活动能否开展有效地。对于有性能测试需求的项目,公司通常会有专职的性能测试工程师或性能测试团队(即使人数不多,也可能是临时组建的)。性能测试工程师直接或间接参与客户对系统/应用性能需求的调研会议,识别和收集应用系统的技术和业务需求。这包括获取有关应用程序架构、所用技术和数据库、目标受众、功能、应用程序使用情况、性能测试需求、硬件和软件要求等的信息。性能测试工具的选择确定了性能测试需求之后,接下来就是性能测试工具的选择。如果之前没有类似的经验,公司对必须使用的工具也没有硬性规定,那么在这个节点,我们可以将可用的工具一一罗列。从工具的成本、应用使用的协议、构建应用所用的技术、我们测试模拟的用户数量等方面筛选可用工具列表,选择一款适合自己的性能测试工具目前的项目情况。选择好测试工具后,我们需要针对关键业务创建一个脚本,在10-15个虚拟用户中执行。演示)。性能测试规划设计根据第一阶段收集到的搜索信息,我们需要对性能测试进行整体规划设计。测试计划的目的是明确应该如何进行性能测试,即性能测试环境、工作负载场景的设计、相关的硬件配置等。该阶段的输入是测试需求分析,输出是测试策略文档(包括整个性能测试计划和设计)。测试策略文档将在下面作为示例呈现。性能测试用例开发①基于POC的测试用例开发:根据上述测试方案确定的测试范围和核心业务功能,开始设计和编写性能测试用例;这些初始测试用例通常是根据POCTool期间选择的性能测试来记录被测业务的步骤。②基于POC的测试用例评审:最好让客户代表参与性能测试用例的评审,获得他们的认可,保证被测业务每一步的准确性。③测试用例优化:基于POC的测试用例通过审核后,我们可以逐步优化测试用例,如参数化、等待、集合点设置等。④环境同步:在创建优化性能测试用例脚本时,需要搭建测试环境(软件和硬件),保证性能测试脚本在特定环境下执行(尽可能模拟真实的线上环境)。⑤真实用户VS虚拟用户:如果在真实客户环境下进行性能测试,性能团队还需要考虑如何避免实时用户和虚拟用户同时在线的情况。一般来说,可以选择避开大量实时在线用户和相当高的活跃度。性能测试建模为测试执行创建性能负载场景模型。该阶段的主要目的是验证在测试过程中是否达到了给定的性能指标(来自性能要求)。性能测试执行在指定场景下执行性能测试脚本,性能测试场景根据上述负载模型设计,通过增加虚拟用户数进行测试执行。例如,如果最大用户数为100,则场景将首先以10、25、50个用户运行,依此类推,最终以100个用户运行。性能测试结果分析测试结果是性能测试人员最重要的交付成果,可以证明ROI(投资回报)??,也可以证明性能测试工作的真正价值。由于性能测试通常需要多次执行才能得出正确的结论,无论是通过工具自动生成还是自行聚合,测试结果。有效的性能测试结果分析需要注意以下几点:分析并记录测试失败的原因。与之前的测试执行相比,应用程序的性能是否发生了变化。为了执行性能测试用例,从应用程序构建到测试环境所做的设置更改是什么。针对每个性能场景执行的测试用例,及时分析性能测试结果,避免在最终呈现完整的性能测试报告时遗漏任何数据指标。总结中需要说明每次测试的目的、对应的虚拟用户数、测试时长、响应时间、吞吐量、不同负载情况下的性能指标对比图、测试过程中出现的错误以及建议后续改进。完整报告完整的性能测试报告简洁明了,不需要任何推导。开发团队需要更多关于分析、比较结果的信息,以及如何获得结果的详细信息。性能测试计划/策略编写演示现在让我们使用实时消息应用程序作为示例来编写性能测试策略。由于用户对不同产品的性能需求不同,这里仅通过demo来展示编写性能测试策略的完整过程。您可以在工作中适当裁剪演示模板,以满足您当前的项目需求。关于XXX在线聊天应用:假设这是当前客户公司内部使用的聊天工作平台,该聊天应用支持基于XMPP协议收发即时消息。此外,还对平台功能进行了一些增强,例如远程PC控制、PC诊断、维修工具、在线聊天等。对于此应用程序,我们假设项目团队已决定使用JMeter进行性能测试并使用JIRA进行缺陷跟踪。性能测试策略文档的首页应包含文档标题和公司版权;第二页应包含文档控制,包括文档版本历史、审阅者和批准者列表以及贡献者列表;第三页应该包含一个目录,其中涉及以下主题:①简介本文档的目的是解释如何基于当前和未来的状态对XXX聊天应用程序进行性能测试。XXX聊天应用程序是一个用于内部远程支持的工作平台,具有实时聊天、客户识别、远程PC控制、PC诊断和维修工具等功能。性能测试的主要目的如下:确保当前聊天应用程序的任何更新都符合规范的服务级别协议。确保应用程序性能、可用??性和稳定性不会因添加新功能而受到影响。在负载持续增加的情况下,事务响应时间保持在可接受的范围内。在负载增加的情况下,JVM始终显示稳定的内存使用情况。下图清晰的展示了性能测试/优化过程:注:如果是在企业,也可以在这里附上被测应用系统的架构设计图。②性能测试工作范围XXXChat应用性能测试工作范围如下(InScope):通过对系统的详细研究,获得关键的事务处理节点,构建负载分布。确定性能测试的关键场景。使用以前版本的结果作为未来版本的基线。确认其他用于分布式压测的代理性能测试环境,以及使用的性能测试工具。使用JMeter模拟各种峰值负载,针对负载场景编写性能测试脚本。为服务器设置性能指标监控,以识别测试执行阶段的性能瓶颈。发布性能测试结果。与项目利益相关者协作和沟通,以确定可行的调整解决方案,并为已识别的性能问题提供解决方案。产品未来版本的基准性能要求。以下任务不在本次性能测试工作范围内(OutofScope):功能测试、UAT、系统测试和安全测试;任何第三方接口的性能测试/监控。性能调优;(大部分时间调优是由不同的团队完成的,如果团队中有性能工程师调优系统,他们的这部分工作可以加入到InScope中)。安全/渗透测试/白盒测试。用于性能测试的数据生成。非功能测试(例如,故障转移、灾难恢复、备份、可用性),而不是性能测试。第三方应用程序性能测试和调优。从性能团队的角度来看,应用程序代码更改、优化供应商支持的产品/服务器配置等超出了范围。基础设施支持/构建部署/环境准备/数据库恢复/网络支持等③性能测试方案XXX聊天应用的性能测试将使用JMeter进行,结合自定义编写的XMPP插件,这些插件实现XMPP连接通过Smack库。这些库用于创建连接、实现用户登录以及向XMPP服务器发送聊天消息。这些库被打包成一个Jar文件,然后部署到JMeter中,根据测试场景进行设计。JMeter工作台是JMeter服务器,安装在本地机器上。JMeter工作台通过负载生成器生成需要的负载,并向聊天服务器所在的系统发送请求。同时,JMeter工作台负责监控聊天服务器所在系统的行为。根据性能测试需求分析,通过JMeter创建测试脚本和测试场景,针对不同场景设计虚拟用户数量和虚拟用户活动状态,尽可能模拟真实场景。每个测试场景从以下几个方面进行分解测试:基线测试:1个虚拟用户数+多次迭代运行每个场景,判断应用性能是否满足业务服务水平。基本负载测试:为了满足负载测试下的业务基准,性能测试团队将执行基本负载测试,这将有助于在负载增加时识别任何系统性能问题,并为下一级性能测试提供基础创建基线。峰值负载/可扩展性测试:性能测试团队进行多次测试以增加虚拟用户数量以满足预期负载。同时检测应用性能,建立性能曲线,判断当前应用部署是否能够支撑峰值用户负载。服务水平协议。这有助于调整单个Java虚拟机(JVM),以及对所需的JVM和处理器总数进行容量规划。通过将虚拟用户数的值增加到峰值容量的50%、75%、100%和125%来执行峰值负载测试。持久性测试/稳定性测试:性能测试团队根据不同时长(8小时/16小时/24小时)持续运行指定测试,以识别内存泄漏和其他随时间推移的性能问题,并验证整体系统稳定性。在持久化测试中,性能测试团队需要监控事务响应时间、CPU、I/O、内存等系统资源占用等关键性能指标是否稳定。假设性能测试环境是生产环境的复制品,测试在增量负载下运行,以确定应用程序在哪里不满足性能要求,或者在该负载下表现出意外行为。④性能测试场景注:企业中所有的测试场景都可以写在一个Excel文档中,这里仅以一个测试场景为例。【场景一】:验证agent和client的并发会话数。【测试方案】:下表列出了不同的性能测试方案及其对应的测试目标。【性能指标设置】客户关注指标:系统&网络性能指标:【性能测试阶段活动及对应输出】如下图:⑤测试数据源这里假设所有性能环境数据都是生产环境数据的副本,所需测试数据由项目组统一提供。⑥测试进入退出标准测试进入退出标准如上图所示:接入环境中所有应用环境准备就绪性能测试数据准备就绪⑦缺陷管理缺陷管理如下:本项目将使用JIRA缺陷管理模块来记录和跟踪缺陷直至关闭。在测试执行阶段发现的错误将记录在JIRA中,并由开发团队根据以下严重级别进行修复。缺陷审查会议将列入日常工作日程,涉及测试、开发、质量分析师和业务团队。随着项目发布日期的推进,修复缺陷的标准会越来越严格。因此,在日常的缺陷评审会上,有必要出台缺陷修复标准的指导策略。缺陷严重程度定义,如下图所示:⑧测试工具&技术⑨测试执行的阶段和恢复标准⑩交付性能测试交付物包括:性能测试策略性能需求文档性能测试场景文档性能测试脚本性能测试结果?Role&Responsibilities不同角色及其对应职责如下表:?潜在风险及缓解方案如下表:?性能测试约定规则性能测试约定规则如下:性能测试环境为真实产品环境的复制(即硬件、软件、接口、集成层等与真实产品一致)。性能脚本将根据使用率高的关键业务流程进行设计。在性能测试开始之前必须解决所有基础架构问题,之后进行的任何系统配置更改都将导致无效的测试结果。性能测试执行前提:必须保证应用稳定,可以在性能测试环境中使用。硬件和软件资源(例如用户负载生成工具、控制器/代理机器)已准备就绪。性能测试范围的任何变更都必须经过变更控制流程,性能测试团队将评估变更对时间/资源的影响。启用应用程序跟踪日志记录。至此我们就完成了聊天应用性能测试方案的编写。在真实的企业项目中,可以根据实际情况对文档内容进行裁剪。总结不难发现,要顺利完成一个性能测试项目,需要保证性能测试规划阶段各个环节的准确性。即计划、基于测试需求分析的用例开发、场景设计、测试执行和结果分析,这些关键点必须以正确的方式进行,再加上合理的风险预估和缓解策略。希望通过这篇文章的分享,可以丰富您在性能测试领域的知识和实践,同时学习如何编写性能测试计划文档,并附有详细的实例,为后续的性能开发打下良好的基础测试活动。作者:罗小罗简介:英国计算机专业TOP10,计算机科学与技术硕士,曾就职于汇丰银行、摩根大通、惠普、交通银行、阿里等国内外知名企业。涉及的项目领域主要包括:互联网金融、电子商务、教育、医疗等。目前就职于某世界500强企业,作为测试开发团队的负责人,带领团队搭建并持续优化自动化测试框架,并开发自动化测试辅助工具;擅长领域:单元/接口/性能/安全/自动化测试/CD/CI/DevOps;个人持续研究领域:自动化测试模型/数据分析/算法/机器学习等编辑:陶佳龙征稿:有意投稿或寻求报告,请联系editor@51cto.com合作站点转载请注明原作者和出处为.com]
