软件测试中的耐久性测试是什么?(附示例)
耐久性测试
耐久性测试是一种非功能性软件测试,通过在长时间内对软件施加高负载来评估软件应用程序在持续使用下的行为。耐久性测试的主要目的是确保应用程序能够处理长时间的负载而响应时间不会下降。
这种类型的测试在性能运行周期的最后阶段进行。耐久性测试是一个漫长的过程,有时甚至持续一年。这可能包括施加外部负载,例如互联网流量或用户操作。这使得耐久性测试与通常在几个小时内结束的负载测试不同。
耐久性意味着容量,换句话说,你可以将耐久性测试称为容量测试。
耐久性测试的目标
- 耐久性测试的主要目标是检查内存泄漏。
- 发现系统在持续使用下的性能。
- 确保在长时间使用后,系统响应时间保持不变或优于测试开始时。
- 确定给定系统将支持的用户数量和/或事务数量,并达到性能目标。
- 为了管理未来的负载,我们需要了解需要多少额外资源(如处理器容量、磁盘容量、内存使用或网络带宽)来支持未来的使用。
- 耐久性测试通常通过使系统过载或减少某些系统资源并评估后果来完成。
- 执行此操作是为了确保在相对“正常”的使用期后不会出现缺陷或内存泄漏。
耐久性测试中要监控什么
在耐久性测试中,测试以下事项。- 测试内存泄漏——检查应用程序是否存在内存泄漏,这可能导致系统或操作系统崩溃。
- 测试系统层之间的连接关闭——如果系统层之间的连接未成功关闭,可能会导致系统部分或所有模块停滞。
- 测试数据库连接是否成功关闭——如果数据库连接未成功关闭,可能会导致系统崩溃。
- 测试响应时间——测试系统响应时间,因为系统长时间使用会导致应用程序效率降低。
如何执行耐久性测试
以下是耐久性测试的基本测试方法- 测试环境 – 确定耐久性测试所需的硬件、软件、操作系统,分配团队内的角色和职责等。环境应在测试执行前准备就绪。您还需要估算常见的数据库生产规模和年度增长。这是必需的,因为您需要测试应用程序在一年、两年或五年后的响应情况。
- 创建测试计划、场景 – 根据测试性质——手动、自动化或两者结合,应计划测试用例设计、评审和执行。强调系统、断点测试等也应是测试计划的一部分。强调系统测试用于确定应用程序的断点。
- 测试估算 – 估算完成测试阶段所需的时间。应根据参与测试人员的数量和所需测试周期数进行分析。
- 风险分析 – 分析风险并采取适当的预防措施。根据风险因素对测试用例进行优先级排序,并识别测试人员在耐久性测试中可能遇到的以下风险和问题。
- 性能会随时间保持一致吗?
- 还有其他尚未发现的小问题吗?
- 是否存在未解决的外部干扰?
- 测试计划 – 在时间范围内确定预算、交付成果。因为耐久性测试在连续一段时间内对系统/应用程序施加巨大但自然的事务负载。
耐久性测试示例
虽然压力测试将受测系统推向极限,但耐久性测试则将应用程序推向时间上的极限。例如,最复杂的问题——内存泄漏、数据库服务器利用率和无响应系统——发生在软件长时间运行之后。如果您跳过耐久性测试,在部署前检测到此类缺陷的几率非常低。耐久性测试工具
- WebLOAD
- LoadComplete
- Apache JMeter
- LoadRunner
- Appvance
- LoadUI
- OpenSTA
- Rational Performance Tester
耐久性测试的优点
- 它有助于确定负载下的系统可以处理多少工作量。
- 提供准确的数据,客户可以使用这些数据来验证或增强其基础设施需求。
- 识别系统长时间高负荷运行后可能出现的性能问题。
- 典型问题在较小的目标性能测试中得到识别,这意味着它确保即使在短时间内存在巨大负载,应用程序仍然可用。
- 耐久性测试还用于检查长时间执行后是否存在任何性能下降。
耐久性测试的缺点
- 通常很难定义施加多大压力是值得的。
- 如果测试环境未隔离,耐久性测试可能会导致应用程序和/或网络故障,从而导致严重中断。
- 过度强调系统可能会导致永久数据丢失或损坏。
- 移除压力后,资源利用率仍然很高。
- 某些应用程序组件无响应。
- 最终用户观察到未处理的异常。
摘要
- 在软件工程中,耐久性测试是负载测试的一个子集。
- 耐久性测试是一个漫长的过程,有时甚至持续一年。
- 检查以下内容:
- 测试内存泄漏
- 测试响应时间
- 测试数据库连接等。