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

压力测试

压力测试是一种软件测试,用于验证软件应用程序的稳定性与可靠性。压力测试的目标是在极高负载条件下衡量软件的健壮性和错误处理能力,并确保软件在危机情况下不会崩溃。它甚至超越正常操作点进行测试,评估软件在极端条件下的工作情况。

stress testing image

在软件工程中,压力测试也称为耐久性测试。在压力测试下,AUT(被测应用程序)会在短时间内承受压力,以了解其承受能力。压力测试最突出的用途是**确定系统、软件或硬件发生故障的极限**。它还检查系统在极端条件下是否能有效进行错误管理。

当从网站复制5GB数据并粘贴到记事本时,被测应用程序将承受压力。记事本处于压力之下并显示“未响应”错误消息。

What is STRESS Testing in Software Testing: Tools, Need & Types

压力测试的必要性

考虑以下实时示例,我们可以从中发现压力测试的用途:

  • 在节假日期间,在线购物网站的流量可能会激增,或者在宣布促销活动时。
  • 当某个博客被主流报纸提及后,其流量会突然激增。

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

压力测试也因以下原因而极具价值:

  • 检查系统在异常条件下是否正常工作。
  • 当系统承受压力时显示适当的错误消息。
  • 系统在极端条件下发生故障可能导致巨大的收入损失。
  • 通过执行压力测试为极端条件做好准备是更好的选择。

压力测试的目标

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

为了进行压力测试,有时可能会使用大量数据集,这些数据可能在压力测试期间丢失。测试人员在进行压力测试时,不应丢失这些与安全相关的数据。

压力测试的主要目的是确保系统在故障后恢复,这被称为**可恢复性**。

负载测试与压力测试

Load testing vs Stress testing image

负载测试 压力测试
负载测试是在正常工作负载条件下测试系统行为,它只是用实际工作负载进行测试或模拟。 压力测试是在极端条件下测试系统行为,并一直进行到系统发生故障。
负载测试不会破坏系统 压力测试试图通过使用过多的数据或资源进行测试来破坏系统。

压力测试的类型

以下是压力测试的类型,解释如下:

分布式压力测试

Types of Stress Testing

在分布式客户端-服务器系统中,测试是在服务器上对所有客户端进行的。压力服务器的作用是向所有压力客户端分发一组压力测试并跟踪客户端的状态。在客户端联系服务器后,服务器添加客户端名称并开始发送数据进行测试。

同时,客户端机器发送信号或心跳表示已连接到服务器。如果服务器未收到客户端机器的任何信号,则需要进一步调查以进行调试。从图中可以看出,服务器可以连接到2个客户端(Client1和Client2),但无法从Client 3和4发送或接收信号。

夜间运行是运行这些压力测试场景的最佳选择。大型服务器场需要一种更有效的方法来确定哪些计算机发生了需要调查的压力故障。

应用程序压力测试

此测试着重于发现与数据锁定和阻塞、网络问题以及应用程序中的性能瓶颈相关的缺陷。

事务压力测试

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

系统压力测试

这是一种集成压力测试,可以在同一服务器上运行的多个系统之间进行测试。它用于查找一个应用程序数据阻塞另一个应用程序的缺陷。

探索性压力测试

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

  1. 大量用户同时登录
  2. 如果所有机器同时启动了病毒扫描程序
  3. 当从网站访问数据库时,如果数据库已离线,
  4. 当大量数据同时插入数据库时

如何进行压力测试?

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

步骤 1) 规划压力测试:在此阶段,您收集系统数据,分析系统,定义压力测试目标。

步骤 2) 创建自动化脚本:在此阶段,您创建压力测试自动化脚本,为压力场景生成测试数据。

步骤 3) 脚本执行:在此阶段,您运行压力测试自动化脚本并存储压力结果。

步骤 4) 结果分析:在此阶段,您分析压力测试结果并识别瓶颈。

步骤 5) 调整和优化:在此阶段,您微调系统,更改配置,优化代码,以达到所需的基准。

最后,您再次运行整个循环以确定调整是否产生了预期的结果。例如,为了实现性能目标,进行3到4次压力测试循环是很常见的。

推荐用于压力测试的工具

LoadRunner

惠普的LoadRunner是一款广泛使用的负载测试工具。LoadRunner形成的负载测试结果被视为基准。

Jmeter

Jmeter是一款开源测试工具。它是一款纯Java应用程序,用于压力和性能测试。Jmeter旨在涵盖负载、功能、压力等各种测试类型。它需要JDK 5或更高版本才能运行。

压力测试器

该工具提供对Web应用程序性能的广泛分析,以图形格式显示结果,并且非常易于使用。无需高级脚本编写,并能带来良好的投资回报。

NeoLoad

这是一款市场上流行的工具,用于测试Web和移动应用程序。该工具可以模拟数千名用户,以评估应用程序在负载下的性能并分析响应时间。它还支持云集成——性能、负载和压力测试。它易于使用、成本效益高并提供良好的可扩展性。

压力测试的指标

指标有助于评估系统的性能,通常在压力测试结束时进行研究。常用的指标有:

衡量可伸缩性和性能

  • 每秒页面数:衡量每秒请求的页面数
  • 吞吐量:基本指标 - 每秒响应数据大小
  • 轮次:计划的测试场景次数与客户端执行的次数

应用程序响应

  • 命中时间:检索图像或页面的平均时间
  • 首字节时间:返回数据或信息的首字节所需的时间
  • 页面时间:检索页面中所有信息所需的时间

故障

  • 失败连接:客户端拒绝的失败连接数(信号弱)
  • 失败轮次:失败的轮次数量
  • 失败点击:系统失败的尝试次数(损坏的链接或未显示的图像)

结论

压力测试的目的是在极端条件下检查系统。它监控内存、处理器、网络等系统资源,并检查系统恢复正常状态的能力。它检查系统在承受压力时是否显示适当的错误消息。

压力测试示例

  1. 电商网站宣布节日促销
  2. 重大事件发生时的新闻网站
  3. 教育局成绩查询网站
  4. 社交网站或博客、应用程序等