性能测试教程

负载测试

什么是性能测试?

性能测试 是一种软件测试过程,用于测试特定工作负载下软件应用程序的速度、响应时间、稳定性、可靠性、可扩展性和资源使用情况。性能测试的主要目的是识别和消除软件应用程序中的性能瓶颈。它是性能工程的一个子集,也称为 “性能测试”.

性能测试的重点是检查软件程序的

  • 速度 – 确定应用程序是否快速响应
  • 可扩展性 – 确定软件应用程序可以处理的最大用户负载。
  • 稳定性 – 确定应用程序在不同负载下是否稳定

为什么要做性能测试?

软件系统支持的特性和功能并不是唯一需要考虑的问题。软件应用程序的性能(如响应时间、可靠性、资源使用率和可扩展性)也很重要。性能测试的目标不是查找错误,而是消除性能瓶颈。

性能测试旨在为利益相关者提供有关其应用程序的速度、稳定性和可扩展性的信息。更重要的是,性能测试揭示了产品上市前需要改进的地方。如果没有性能测试,软件可能会出现以下问题:多个用户同时使用时运行缓慢、不同操作系统之间不一致以及可用性差。

性能测试

性能测试将确定其软件是否满足预期工作负载下的速度、可扩展性和稳定性要求。由于不存在性能测试或性能测试不佳而将性能指标不佳的应用程序推向市场,可能会获得不良声誉,无法达到预期的销售目标。

也, 关键任务应用程序 诸如航天发射计划或救生医疗设备等都应进行性能测试,以确保它们能够长时间运行而不会出现偏差。

根据 Dunn & Bradstreet 的数据,59% 的财富 500 强公司每周的停机时间约为 1.6 小时。考虑到拥有至少 500 名员工的财富 10,000 强公司平均每小时支付 56 美元,此类组织停机成本的人工部分每周将达到 896,000 美元,相当于每年超过 46 万美元。

只有一个 5 分钟停机时间 Google.com 的收购(19 年 13 月 XNUMX 日)预计将使这家搜索巨头损失高达 $ 545,000。

据估计,公司损失了销售额 每秒 1100 美元 由于最近 Amazon Web 服务中断。

因此,性能测试非常重要。为了帮助您完成此过程,请查看此列表 性能测试工具.

性能测试的类型

软件测试中性能测试主要有六种类型,如下所述。

  • 负载测试 – 检查应用程序在预期用户负载下的运行能力。目的是在软件应用程序上线之前确定性能瓶颈。
  • 压力测试 涉及在极端工作负载下测试应用程序,以了解其如何处理高流量或数据处理。目标是确定应用程序的临界点。
  • 耐力测试 – 这样做是为了确保软件能够长期处理预期的负载。
  • 尖峰测试 – 测试软件对用户产生的突然大幅负载峰值的反应。
  • 容量测试 – 容量测试:大量数据被填充到数据库中,整个软件系统的行为受到监控。目的是检查软件应用程序在不同数据库容量下的性能。
  • 可扩展性测试 – 可扩展性测试的目的是确定软件应用程序在“扩展”以支持用户负载增加方面的有效性。它有助于规划软件系统的容量增加。

常见的性能问题

大多数性能问题都与速度、响应时间、加载时间和较差的可扩展性有关。速度通常是应用程序最重要的属性之一。运行缓慢的应用程序会失去潜在用户。性能测试可确保应用程序运行速度足够快,以吸引用户的注意力和兴趣。查看以下常见性能问题列表,并注意速度是其中许多问题的共同因素:

  • 加载时间长 – 加载时间通常是应用程序启动的初始时间。通常应将此时间保持在最低限度。虽然有些应用程序不可能在一分钟内加载,但如果可能的话,加载时间应保持在几秒钟以内。
  • 响应时间较差 – 响应时间是指从用户将数据输入应用程序到应用程序对该输入做出响应所需的时间。通常,响应时间应该非常短。同样,如果用户等待时间过长,他们就会失去兴趣。
  • 可扩展性差—— 当软件产品无法处理预期的用户数量或无法容纳足够广泛的用户时,其可扩展性就会较差。 负载测试 应该这样做以确保应用程序可以处理预期的用户数量。
  • 瓶颈 – 瓶颈是系统中的障碍,会降低整个系统的性能。瓶颈是指编码错误或硬件问题导致特定负载下的吞吐量下降。瓶颈通常是由一段有缺陷的代码引起的。解决瓶颈问题的关键是找到导致速度变慢的代码段并尝试在那里修复它。瓶颈通常通过修复运行不良的进程或添加额外的硬件来解决。一些 常见的性能瓶颈 旨在
    • CPU利用率
    • 内存利用率
    • 网络利用率
    • Opera系统限制
    • 磁盘使用情况

如何进行性能测试

性能测试所采用的方法可能千差万别,但性能测试的目标始终不变。它可以帮助证明您的软件系统符合某些预定义的性能标准。或者,它可以帮助比较两个软件系统的性能。它还可以帮助识别软件系统中降低其性能的部分。

以下是执行性能测试的一般流程

性能测试流程
性能测试流程

步骤 1)确定您的测试环境

了解您的物理测试环境、生产环境以及可用的测试工具。在开始测试过程之前,了解测试期间使用的硬件、软件和网络配置的详细信息。这将帮助测试人员创建更高效​​的测试。它还将有助于识别测试人员在性能测试过程中可能遇到的挑战。

步骤2)确定绩效验收标准

这包括吞吐量、响应时间和资源分配的目标和约束。在这些目标和约束之外,还需要确定项目的成功标准。测试人员应该有权设定性能标准和目标,因为项目规范通常不会包括足够多的性能基准。有时可能根本没有。如果可能的话,找到一个类似的应用程序进行比较是设定性能目标的好方法。

步骤3)规划和设计性能测试

确定最终用户的使用情况可能有何不同,并确定所有可能用例的关键测试场景。有必要模拟各种最终用户,规划性能测试数据并概述将收集哪些指标。

步骤4)配置测试环境

执行前准备好测试环境,并安排工具和其他资源。

步骤5)实施测试设计

根据您的测试设计创建性能测试。

步骤 6)运行测试

执行并监控测试。

步骤 7)分析、调整和重新测试

整合、分析和共享测试结果。然后进行微调并再次测试,看看性能是否有所改善或下降。由于改进通常会随着每次重新测试而变小,因此当瓶颈是由 CPU 引起时,请停止。然后,您可以考虑增加 CPU 功率。

性能测试指标:监控参数

性能测试期间监控的基本参数包括:

性能测试指标

  • 处理器使用情况 – 处理器执行非空闲线程所花费的时间。
  • 内存使用 – 计算机上进程可用的物理内存量。
  • 磁盘时间 – 磁盘忙于执行读取或写入请求的时间。
  • 带宽– 显示网络接口每秒使用的位数。
  • 私有字节 – 进程分配的、不能与其他进程共享的字节数。这些用于测量内存泄漏和使用情况。
  • 已提交的记忆 – 使用的虚拟内存量。
  • 内存页面/秒 – 为解决硬页面错误而写入或读取磁盘的页面数。硬页面错误是指从其他地方调用不属于当前工作集的代码并从磁盘中检索时发生的错误。
  • 每秒页面错误数 – 处理器处理故障页的总体速率。当进程需要来自其工作集之外的代码时,也会发生这种情况。
  • 每秒 CPU 中断次数 – 是处理器每秒接收和处理的硬件中断的平均数。
  • 磁盘队列长度 – 是采样间隔期间选定磁盘排队的读写请求的平均数量。
  • 网络输出队列长度 – 输出数据包队列的长度(以数据包为单位)。任何大于 2 的值都意味着需要停止延迟和瓶颈。
  • 每秒网络字节总数 – 在接口上发送和接收字节(包括帧字符)的速率。
  • 响应时间 - 从用户输入请求到收到响应的第一个字符的时间。
  • 吞吐量 – 计算机或网络每秒接收请求的速率。
  • 连接池的数量 – 池连接满足的用户请求数。池中的连接满足的请求越多,性能就越好。
  • 最大活动会话数 – 可以同时处于活动状态的最大会话数。
  • 命中率 – 这与 SQL 这些语句由缓存数据处理,而不是昂贵的 I/O 操作。这是解决瓶颈问题的良好开端。
  • 每秒点击次数 – 负载测试期间每秒对 Web 服务器的点击次数。
  • 回滚段 – 可以在任何时间点回滚的数据量。
  • 数据库锁 – 表和数据库的锁定需要进行监控和仔细调整。
  • 最热门的等待 – 监控以确定在处理从内存中检索数据的速度时可以减少哪些等待时间
  • 线程数 – 应用程序的健康状况可以通过正在运行和当前活动的线程数来衡量。
  • 垃圾收集 - 它与将未使用的内存返回给系统有关。需要监控垃圾收集的效率。

性能测试用例示例

  • 测试用例 01: 验证4个用户同时访问网站时响应时间不超过1000秒。
  • 测试用例 02: 当网络连接较慢时,验证负载下应用程序的响应时间是否在可接受范围内
  • 测试用例 03: 检查应用程序崩溃前可以处理的最大用户数。
  • 测试用例 04: 检查同时读取/写入500条记录时的数据库执行时间。
  • 测试用例 05: 检查峰值负载条件下应用程序和数据库服务器的 CPU 和内存使用情况
  • 测试用例 06: 验证应用程序在低负载、正常负载、中负载和重负载条件下的响应时间。

在实际的性能测试执行过程中,可接受范围、重负载等模糊术语被具体的数字所取代。性能工程师根据业务需求和应用程序的技术状况设置这些数字。

性能测试工具

市场上有各种各样的性能测试工具。您选择的测试工具将取决于许多因素,例如支持的协议类型、许可证成本、硬件要求、平台支持等。以下是常用测试工具的列表。

  • HP LoadRunner 是目前市场上最受欢迎的性能测试工具。该工具能够模拟数十万用户,将应用程序置于真实负载下,以确定其在预期负载下的行为。 负载运行器 具有虚拟用户生成器,可模拟真实人类用户的动作。
  • 捷米特 – 用于 Web 和应用程序服务器负载测试的主要工具之一。

常见问题

性能测试始终只针对基于客户端-服务器的系统进行。这意味着,任何不是基于客户端-服务器架构的应用程序都不需要性能测试。

例如, Microsoft 计算器既不是基于客户端-服务器的,也不运行多个用户;因此,它不适合进行性能测试。

性能测试

了解性能测试和性能工程之间的区别是很重要的。下面分享一种理解:

性能测试 是一门与 测试和报告 软件应用程序在各种参数下的当前性能。

绩效工程 是测试和调整软件以实现所需性能的过程。此过程旨在优化最重要的应用程序性能特征,即用户体验。

从历史上看,测试和调优是截然不同且经常相互竞争的领域。然而,在过去几年中,一些测试人员和开发人员独立合作成立了调优团队。由于这些团队取得了巨大的成功,将性能测试与性能调优结合起来的概念开始流行起来,现在我们称之为性能工程。

结语

In 软件工程,在销售任何软件产品之前,性能测试都是必要的。它可以确保客户满意度并保护投资者的投资免受产品故障的影响。性能测试的成本通常可以通过提高客户满意度、忠诚度和保留率来弥补。