软件测试中的压力测试是什么?

⚡ 智能摘要

压力测试将应用程序推向超出其正常运行极限的状态,以找出其极限,确认故障能够得到妥善处理,并证明一旦消除极端负载,系统就能干净利落地恢复。

  • 🔘 定义: 压力测试用于衡量系统在远超生产流量负载下的稳健性和错误处理能力。
  • ☑️ 目的: 该测试可以确定确切的故障点,并在负载恢复正常后验证其可恢复性。
  • ✅ 范围: 分布式、应用、事务性、系统性和探索性变体分别强调系统的不同层面。
  • 🧪 过程: 计划、编写脚本、执行、分析,然后进行调整——通常需要三到四个完整的周期才能达到基准。
  • 🛠️ 工具: LoadRunner Apache JMeterStressTester 和 Neo加载并发虚拟用户并捕获响应数据。
  • 📊 指标: 吞吐量、每秒页面数、命中时间、首字节到达时间以及连接失败次数等指标可以量化结果。

软件测试中的压力测试

什么是压力测试?

压力测试 压力测试是一种软件测试方法,用于验证软件应用程序的稳定性和可靠性。其目标是在极高的负载条件下评估软件的健壮性和错误处理能力,并确保软件在紧急情况下不会崩溃。压力测试会刻意超出正常运行范围进行测试,并评估软件在极端条件下的运行情况。

压力测试是指在短时间内对被测应用程序 (AUT) 施加压力,以检验其承受能力。压力测试最主要的用途是确定系统、软件或硬件的极限状态。它还能检验系统在超过该极限状态后是否具有有效的错误处理机制。

In 软件工程压力测试通常与 耐力测试但两者有所不同:压力测试是在短时间内施加异常高的负载以找出断裂点,而耐久性(浸泡)测试则是在数小时内保持中等负载以暴露逐渐退化的情况。

下面的屏幕截图显示了从网页复制的一大块数据。

从网页复制大量数据来测试桌面应用程序的性能。

当从网站复制 5 GB 数据并粘贴到记事本中时,被测应用程序会承受压力。此时记事本会因压力过大而返回“未响应”错误消息,如下图所示。

记事本在粘贴 5GB 数据后显示“未响应”错误消息。

同样的原理也适用于服务器端系统。

压力测试的必要性

请看以下实际示例,其中压力测试的用途显而易见:

  • 节日期间,一家网店ping 网站流量可能会激增,或者在宣布促销活动时也会如此。
  • 当一个博客被主要报纸提及时,其访问量会突然激增。

必须进行压力测试以应对此类异常流量高峰。未能应对这种突发流量可能会导致收入和声誉损失。

压力测试之所以极其重要,还有以下原因:

  • 它检查系统在异常情况下是否正常工作。
  • 它证实,当系统承受压力时,会显示相应的错误信息。
  • 极端情况下系统故障可能导致巨大的收入损失。
  • 提前进行压力测试,为应对极端情况做好准备,效果会更好。

下一节将阐述一次成功的压力测试必须证明哪些内容。

压力测试的目标

压力测试的目标是分析系统在发生故障后的行为。为了使压力测试成功,系统在极端条件下应显示适当的错误信息。

压力测试有时会使用海量数据集,而这些数据可能会在系统故障时丢失。测试人员应确保这些与安全相关的数据在压力测试期间不会丢失。

压力测试的主要目的是确保系统在发生故障后能够恢复,这种特性称为可恢复性。 恢复测试 然后详细核实修复程序。

负载测试与压力测试

这两种技术都属于 性能测试 由于它们是同一家族的成员,所以很容易混淆。下图对比了两种负载曲线。

图表对比了负载测试的稳定负载曲线和应力测试的递增负载曲线。

负载测试 压力测试
负载测试 测试系统在正常工作负载条件下的行为;它模拟实际预期的工作负载。 压力测试是在极端条件下测试系统性能,直至系统失效为止。
负载测试不会破坏系统。 压力测试通过向系统注入大量数据或耗尽系统资源来故意破坏系统。

相关简介包括 尖峰测试 (突然短暂地爆发) 容量测试 (大数据而非众多用户) 可扩展性测试 (增长空间)

压力测试的类型

下面逐一解释压力测试的类型。

分布式压力测试

在分布式客户端-服务器系统中,测试由服务器端对所有客户端执行。压力测试服务器的作用是将一组压力测试分发给所有压力测试客户端,并…… track 表示每个客户端的状态。客户端联系服务器后,服务器会添加客户端名称并开始发送测试数据。下图显示了压力测试服务器如何连接部分客户端而无法连接其他客户端。

分布式压力测试设置中,压力服务器可以连接到客户端 1 和客户端 2,但与客户端 3 和客户端 4 失去连接。

同时,客户端会发送一个信号(或称心跳信号)来确认它们仍然与服务器保持连接。如果服务器没有收到来自某个客户端的任何信号,则需要对该客户端进行进一步的调试。如图所示,服务器可以与两个客户端(客户端1和客户端2)连接,但无法与客户端3和客户端4进行信号收发。

对于这些压力测试场景,通宵运行是最佳选择。大型服务器集群需要更高效的方法来确定哪些计算机出现了压力测试故障,需要进行调查。

应用压力测试

这项测试的重点是查找单个应用程序中与数据锁定和阻塞、网络问题以及性能瓶颈相关的缺陷。

交易压力测试

它对两个或多个应用程序之间的一个或多个事务执行压力测试,用于微调和优化系统。

系统压力测试

这是集成式压力测试,可以跨多个共享同一服务器的系统运行。它用于查找应用程序阻塞另一个应用程序数据传输的缺陷。

探索性压力测试

这种压力测试用于在不太可能在实际场景中出现的异常参数或条件下测试系统。它用于在意外情况下发现缺陷,例如:

  • 大量用户同时登录。
  • 所有机器同时启动病毒扫描程序。
  • 数据库在通过网站访问时离线。
  • 大量数据同时被插入数据库。

无论采用哪种变体,执行顺序都保持不变。

如何进行压力测试?

压力测试过程可分为 5 个主要步骤:

  • 步骤1)规划压力测试: 在这里,您可以收集系统数据、分析系统并定义压力测试目标。
  • 步骤2)创建自动化脚本: 在此阶段,您需要创建压力测试自动化脚本,并生成压力场景的测试数据。
  • 步骤3)脚本执行: 在这个阶段,你需要运行压力测试自动化脚本并存储压力测试结果。
  • 步骤4)结果分析: 在这个阶段,你需要分析压力测试结果并找出瓶颈。
  • 步骤 5)调整和优化: 在这个阶段,你需要对系统进行微调,更改配置,并优化代码,以达到预期的基准。

最后,您需要再次运行整个流程,以确定调整是否达到了预期效果。例如,通常需要 3 到 4 个压力测试周期才能达到性能目标,因此脚本通常会与测试脚本一起维护。 回归 套房。

压力测试推荐工具

以下四款工具涵盖了大多数需求,从企业套件到免费开源选项,应有尽有。

加载程序

加载程序 是一款广泛使用的负载测试工具,目前由……销售 OpenText 从HP迁移到Micro Focus后,在专业版、企业版和云版中 OpenTextLoadRunner 生成的负载测试结果被视为基准。

JMeter

Apache JMeter 是一个开源测试工具。它是一个纯粹的 Java 该应用程序用于压力和性能测试,旨在涵盖负载测试、功能测试和压力测试等测试类型。当前版本为 5.6.x。 Apache JMeter 要求 Java 8 或更高版本, Java 推荐17。

压力测试仪

该工具可对 Web 应用程序性能进行全面分析,以图形格式呈现结果,且使用简便。无需编写高级脚本,从而确保投资回报率。trac更适合小型团队。

Neo载荷

Neo载荷, 现在的一部分 Tricentis Portfolio 是一个流行的网站测试工具。 移动应用它可以模拟数千名用户,从而评估应用程序在负载下的性能并分析响应时间。它还支持云集成性能、负载和压力测试,并且具有良好的可扩展性。

指南中列出了更多选项。 性能测试工具无论选择哪一个,其输出结果都只有在符合以下指标的情况下才有意义。

压力测试指标

指标有助于评估系统性能,通常在压力测试结束时进行分析。常用指标分为三类。

衡量可扩展性和性能

  • 每秒页数: 衡量每秒请求的页面数量。
  • 速率: 一个基本指标——每秒响应数据大小。
  • 回合: 测试场景的计划次数与客户实际执行次数之比。

应用响应

  • 击中时间: 获取图像或页面的平均时间。
  • 第一个字节的时间: 返回第一个字节数据或信息所需的时间。
  • 页数: 检索页面上所有信息所需的时间。

故障

  • 连接失败: 客户端拒绝的连接失败次数(信号弱)。
  • 失败轮次: 失败的轮次数。
  • 失败的命中: 系统尝试失败的次数(链接失效或图像无法显示)。

最后一部分列出了最常需要进行压力测试的情况。

压力测试示例

当预计某个事件会使流量远远超出日常基线水平时,压力测试就显得尤为重要:

  • 一家电商网站宣布举办节日促销活动。
  • 重大事件发生时的新闻网站。
  • 教育委员会公布考试成绩。
  • 在病毒式传播时期,社交网站、博客和移动应用程序迅速发展。

在每种情况下,测试都会监控内存、处理器和网络等资源,检查在压力下是否出现相应的错误消息,并确认系统随后恢复正常。它符合…… 软件测试生命周期 作为一项非功能性检查 系统测试 以及更广泛的 软件测试类型.

常见问题

不。压力测试是在短时间内施加异常大的载荷,以确定断裂点。浸泡或 耐久性测试 保持实际负载数小时,以发现内存泄漏和缓慢性能下降。

尖峰测试 压力测试通过向系统施加一个突然且极短时间的负载,并测量其扩展和恢复的速度。压力测试则逐步增加负载直至系统崩溃,因此它衡量的是系统的极限在哪里,而不是系统的反应速度。

每次重大版本发布前、任何可预见的流量高峰期(例如促销日或业绩公布日)前,以及缓存、连接池或自动扩缩容等架构变更后,都要运行一次。许多团队还会每季度重复运行一次,作为基线检查。

在预算允许的范围内,尽可能使用与生产环境规模接近的测试环境,因为硬件配置不足会降低测试的临界点。使用经过掩码处理或合成的生产数据填充测试环境,切勿使用真实客户记录进行破坏性压力测试。

机器学习模型挖掘生产遥测数据,构建真实的峰值流量模型,标记出固定阈值无法识别的异常响应时间曲线,并将资源指标关联起来,从而定位瓶颈。目前,已有多个商业平台能够根据观察到的使用模式生成负载场景。

是的。副驾驶草稿 JMeter 测试计划、k6 或 Gatling 脚本、参数化数据生成器以及 CI 流水线步骤均可通过纯文本提示生成。请将输出视为初稿:思考时间、节奏和断言仍需测试人员验证。

它能揭示真实的容量上限,验证错误处理机制,并降低高峰时段的宕机风险。其局限性在于成本——生产规模的环境和许可证价格昂贵——以及脚本编写工作量和结果会随着基础设施的变化而变化。

性能工程师或专业测试人员会运行它,通常开发人员和运维人员也会在一旁读取服务器指标。它位于功能测试之后。 系统测试一旦构建足够稳定,失败就表明容量限制而不是错误。

总结一下这篇文章: