你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

性能测试建议

适用于此 Azure Well-Architected 框架性能效率清单建议:

PE:06 测试性能。 在与生产环境匹配的环境中执行定期测试。 将结果与性能目标和性能基准进行比较。

本指南介绍测试建议。 性能测试可帮助你评估工作负载在各种方案中的功能。 它涉及测试工作负载的响应时间、吞吐量、资源利用率和稳定性,以帮助确保工作负载满足其性能要求。

测试有助于防止性能问题。 它还有助于确保工作负载符合其服务级别协议。 如果不进行性能测试,工作负荷可能会遇到通常可预防的性能下降。 工作负荷性能可能会偏离性能目标和已建立的基线。

定义

术语 定义
混沌测试 性能测试,旨在通过故意引入随机和不可预知的故障或中断来测试系统的复原能力和稳定性。
负载测试 一种性能测试,用于测量系统在典型负载和重负载下的性能。
性能基线 一组指标,表示工作负载在正常条件下的行为,如测试所验证。
压力测试 一个性能测试,它重载系统,直到系统中断。
综合测试 模拟应用程序中的用户请求的性能测试。

关键设计策略

性能测试可帮助你收集有关工作负荷的可衡量数据。 提前运行测试时,它们还有助于根据正确的规范生成工作负载。 应在软件开发生命周期中尽早执行性能测试。 通过早期测试,可以在开发早期捕获和修复性能问题。 如果生产代码尚未准备好,可以使用概念证明 (POC) 。

准备测试

准备性能测试是指设置和安排有效执行性能测试所需的资源、配置和测试方案。

定义验收条件

验收条件指定工作负荷需要满足的性能要求才能被视为可接受或成功。 定义与性能目标一致的条件。

查看性能目标。 性能目标定义了工作负载所需的性能级别。 查看为工作负荷建立的性能目标。 性能目标是可能涉及响应时间、吞吐量、资源利用率或任何其他相关绩效指标的指标。 例如,响应时间的目标可能低于特定阈值,例如小于 2 秒。

定义验收条件。 将性能目标转换为可用于评估工作负荷性能的特定验收条件。 例如,假设响应时间的性能目标是 2 秒或更短。 接受条件可以是 工作负荷的平均响应时间应小于 2 秒。 使用这些验收条件来确定工作负荷是否满足所需的性能级别。

定义验收条件时,关注用户及其期望非常重要。 验收标准有助于确保交付的工作满足用户需求和要求。 在将用户观点纳入验收条件时,请记住以下注意事项:

  • 用户要求:了解用户对工作负载的需求和目标。 考虑工作负载应如何执行以满足这些要求。

  • 用户体验:定义捕获所需用户体验的验收条件。 包括响应时间、可用性、可访问性和整体满意度等因素。

  • 功能要求:解决用户希望在工作负载中看到的特定功能。 围绕这些功能要求定义验收条件,以帮助确保满足这些要求。

  • 用例:考虑用户可能遇到的不同方案或用例。 基于这些用例定义验收条件,以验证工作负载在实际情况下的性能。

设置接受阈值。 确定接受条件中的阈值,以指示工作负荷是否满足性能目标。 这些阈值定义了每个指标的可接受性能范围。 例如,假设响应时间的接受条件小于 2 秒。 可以将阈值设置为 2.5 秒。 此级别表示超过 2.5 秒的任何响应时间都被视为性能问题。

定义通过条件。 建立用于确定工作负荷是通过还是未通过性能测试的条件。 可以将通过定义为满足所有接受条件或达到一定百分比的验收条件。

选择测试类型

若要选择正确的性能测试类型,请务必使测试与验收标准保持一致。 验收条件定义了需要满足的条件才能考虑完成要求或 bug 修复。 性能测试应旨在验证工作负荷是否满足这些验收条件,并在指定条件下按预期执行。 使性能测试类型与验收标准保持一致有助于确保测试侧重于满足标准定义的性能预期。

  • 了解验收条件。 查看要求或 bug 修复的验收条件。 这些标准概述了要满足的具体条件和功能。

  • 确定相关的性能指标。 根据验收条件,确定对实现所需结果至关重要的性能指标。 例如,如果接受条件侧重于响应时间,则可能适合确定负载测试的优先级。

  • 选择适当的测试类型。 评估可用的测试类型,并选择最符合已识别的性能指标和验收条件的测试类型。

下表提供了测试类型及其用例的示例。

测试类型 说明 用例
负载测试 模拟真实的用户负载,以衡量工作负载在预期的高峰工作负荷下的表现。 确定负载容忍度。
压力测试 将工作负载推至超出其正常限制,以确定其中断点并衡量其恢复能力。 确定复原能力和可靠性。
浸泡测试 (耐力测试) 在持续高负载下长时间运行工作负荷,以确定性能下降、内存泄漏或资源问题。 评估一段时间内的稳定性和可靠性。
峰值测试 模拟用户负载的突然增加,以评估工作负载如何处理需求突然变化。 衡量在高峰期缩放和维护性能的能力。
兼容性测试 跨各种平台、浏览器或设备测试工作负载的性能。 有助于确保各种环境的性能一致。

根据工作负荷的特征和要求确定所选测试类型的优先级。 考虑性能指标的重要性、用户期望、业务优先级和已知问题或漏洞等因素。

选择测试工具

根据要运行的性能测试类型选择适当的工具。 评估测试环境的基础结构、资源和约束。 选择支持所需测试类型的测试工具,并提供监视、测量、分析和报告所需的功能。

应用程序性能监视 (APM) 工具提供对应用程序的深入见解,并且是一个基本的测试工具。 它可帮助你跟踪单个事务,并映射其通过各种工作负载服务的路径。 测试后,应使用 APM 工具根据性能基线分析和比较测试数据。

使用分析工具识别代码中的性能瓶颈。 分析有助于识别消耗最多资源且需要优化的代码区域。 它提供对代码不同部分的执行时间和内存使用情况的见解。

以下步骤可帮助你选择适当的测试工具:

  • 确定测试要求。 首先了解性能测试的特定要求。 请考虑各种因素:

    • 工作负荷的类型
    • 要度量的性能指标,例如响应时间和吞吐量
    • 工作负载体系结构的复杂性
    • 测试环境,例如基于云的、本地或混合
  • 研究测试工具。 开展研究以确定符合要求的性能测试工具。 考虑市场上可用的商业和开源工具。 查找支持所需性能测试类型的工具,例如负载测试或压力测试,并提供用于测量性能指标的功能。

  • 评估工具功能。 评估每个测试工具提供的功能。 查找诸如模拟真实用户行为和可伸缩性等功能,以处理大型用户负载。 请考虑支持各种协议和技术、与其他测试工具或框架集成以及报告和分析功能。

  • 考虑兼容性和集成。 确定测试工具与现有基础结构和技术的兼容性。 确保这些工具可以轻松集成到测试环境中,并且可以与监视和分析所需的工作负载通信。

  • 评估成本和许可。 评估与测试工具关联的成本结构和许可条款。 请考虑初始投资、维护成本和支持成本等因素。 另请考虑其他许可要求,这些要求取决于用户或虚拟用户的数量。

  • 执行 POC。 根据评估选择一些看起来最适合的工具。 执行小规模 POC,以验证特定测试方案中工具的可用性、功能和有效性。

  • 考虑支持和培训。 评估工具的供应商或社区提供的支持和培训级别。 确定文档、教程和技术支持渠道的可用性,以帮助解决测试过程中可能出现的任何挑战或问题。

创建测试方案

创建测试方案是指设计适合测试工作负荷性能的特定情况或条件的过程。 创建测试方案以模拟真实的用户行为和工作负载模式。 这些方案为性能测试人员提供了一种方法来评估工作负载在不同条件下的性能。

通过测试方案可以复制各种工作负载模式,例如并发用户访问、峰值负载时段或特定事务序列。 通过测试不同工作负载模式下的工作负载,可以识别性能瓶颈并优化资源分配。

  • 定义用户行为。 通过识别用户在与工作负载交互时执行的步骤和操作,模拟真实的用户行为和工作负载模式。 请考虑登录、执行搜索、提交表单或访问特定功能等活动。 将每个方案分解为表示用户与工作负载交互的特定步骤和操作。 可以包括浏览页面、执行事务或与工作负载的各种元素交互。

  • 确定数据参与。 确定运行测试方案所需的测试数据。 可以创建或生成表示各种方案、用户配置文件或数据量的实际数据集。 确保测试数据多样化并涵盖不同的用例,以提供全面的性能评估。

  • 设计测试脚本。 创建自动执行定义的测试方案的测试脚本。 测试脚本通常包含一系列操作、HTTP 请求或与工作负载 API 或用户界面的交互。 使用性能测试工具或编程语言编写脚本,考虑参数化、关联和动态数据处理等因素。 验证测试脚本的正确性和功能。 调试任何问题,例如脚本错误、缺少或不正确的操作或与数据相关的问题。 测试脚本验证对于帮助确保准确可靠的性能测试执行至关重要。

  • 配置测试变量和参数。 在测试脚本中配置变量和参数,以引入可变性和模拟真实场景。 包括用户凭据、输入数据或随机化等参数,以模拟不同的用户行为和工作负载响应。

  • 以迭代方式优化脚本。 根据反馈、测试结果或更改要求不断优化和增强测试脚本。 请考虑优化脚本逻辑、参数化和错误处理,或添加额外的验证和检查点。

配置测试环境

配置测试环境是指设置基础结构、软件和网络配置的过程,你需要这些配置来创建与生产环境非常相似的环境。

若要以提高性能效率的方式设置测试环境,请在配置过程中包括以下步骤:

  • 镜像生产环境。 将测试环境设置为与生产环境非常相似。 请考虑基础结构配置、网络设置和软件配置等因素。 目标是确保性能测试结果代表实际条件。

  • 预配足够的资源。 为测试环境分配足够的资源,例如 CPU、内存和磁盘空间。 确保可用资源可以处理预期的工作负载并提供准确的性能度量。

  • 复制网络条件。 在测试环境中配置网络设置,以在实际工作负载部署期间复制预期的网络条件。 需要包括带宽、延迟和网络协议。

  • 安装和配置依赖项。 安装工作负荷正常运行所需的软件、库、数据库和其他依赖项。 配置这些依赖项以匹配预期的生产环境。

权衡:维护单独的测试环境、存储数据、使用工具和运行测试,存在相关成本。 了解性能测试的成本,并找到优化支出的方法。

风险:生产数据可能包含敏感信息。 如果没有可靠的清理和掩码策略,使用生产数据进行测试时,可能会泄露敏感数据。

执行测试

使用所选的测试工具运行性能测试。 测试涉及测量和记录性能指标、监视运行状况以及捕获出现的任何性能问题。

监视和收集性能指标,例如响应时间、吞吐量、CPU 和内存利用率以及其他相关指标。

使用定义的测试方案将工作负载置于预期负载之下。 在这些不同的负载条件下进行测试。 例如,使用正常、峰值和压力级别等级别来分析各种方案中工作负载的行为。

分析结果

分析测试结果涉及检查从性能测试收集的数据和指标,以便深入了解工作负荷的性能。 目标是确定性能问题,并使用反馈调整应用程序开发中的优先级。 以下操作是分析测试结果的关键步骤。

查看性能指标。 查看性能测试期间收集的性能指标,例如响应时间、吞吐量、错误率、CPU 和内存利用率以及网络延迟。 分析这些指标以了解工作负载的整体性能。

  • 确定瓶颈。 评估性能指标,以确定任何瓶颈或性能低下的领域。 评估可能包括高响应时间、资源约束、数据库问题、网络延迟和可伸缩性限制。 查明这些瓶颈的根本原因有助于确定性能改进的优先级。

  • 关联指标。 评估各种性能指标之间的关系和相关性。 例如,分析增加的负载或资源利用率如何影响响应时间。 了解这些关联可以为不同条件下的工作负载行为提供有价值的见解。 在性能数据中查找一段时间内的模式和趋势。 分析不同负载级别或特定时段的性能。 检测趋势有助于识别季节性变化、高峰使用时间或重复出现的性能问题。

评估验收条件。 将重新测试结果与预定义的验收条件和性能目标进行比较。 评估工作负载是否满足所需的性能标准。 如果工作负荷不符合验收条件,请进一步调查并优化优化。

循环访问和优化分析。 根据需要进行其他调整和改进。 使用收集的数据和指标来诊断特定的性能问题。 诊断可能涉及通过工作负荷组件进行跟踪、检查日志文件、监视资源使用情况或分析错误消息。 深入了解数据,了解性能问题的根本原因。

根据对测试结果的分析,确定性能问题的优先级并实施必要的改进。 这些改进可能涉及优化代码、优化数据库查询、改进缓存机制和优化网络配置。

建立基线

基线提供了一个参考点,用于比较一段时间内的性能结果。 基线应该是工作负载性能的有意义的快照,无需将每个测试用作基线。

考虑工作负载目标,并记录性能快照,以便随着时间的推移进行学习和优化。 使用这些基线度量作为未来性能测试的基准,并用它们来识别任何降级或改进。

若要为性能测试建立基线并将其用作未来性能测试的基准,请执行以下步骤:

  • 确定性能指标。 确定要度量和跟踪的特定性能指标。示例包括:

    • 响应时间,或工作负荷响应请求的速度。
    • 吞吐量,或按单位时间处理的请求数。
    • 资源利用率,例如 CPU、内存和磁盘使用率。
  • 记录有意义的度量值。 将测试期间获得的性能指标记录为基线度量值。 这些度量表示你比较未来性能测试的起点。

  • 比较将来的测试。 在后续性能测试中,将性能指标与已建立的基线和阈值进行比较。 通过比较,可以识别性能的任何改进或降级。

持续测试

持续测试涉及持续监视和优化测试。 持续测试有助于保持一致且可接受的性能级别。 工作负荷应提供相对于基线的一致且可接受的性能级别。 应随时间推移优化工作负荷,以生成在可接受的性能限制内的一致性能。 下面是一些关键做法:

  • 设置降级限制。 定义数值阈值,指定一段时间内可接受的性能降级级别。 通过设置这些限制,可以监视性能波动,并在性能低于定义的阈值时接收警报。

  • 包括质量保证。 将性能要求(如 CPU 使用率和每秒最大请求数)纳入质量保证过程。 以与功能要求相同的重要性级别对待性能要求。 此过程有助于确保工作负载在部署到生产环境之前满足定义的性能要求。

  • 自动发出警报。 在实时环境中,快速检测和响应至关重要。 设置使用性能基线作为参考的自动警报系统。 如果性能存在重大偏差,系统会立即提醒必要的团队采取行动。

  • 测试更改。 某些性能问题可能仅出现在实时设置中。 对建议的代码和基础结构更改应用彻底的测试做法。 使用代码检测深入了解应用程序的性能特征,例如热路径、内存分配和垃圾回收。 此测试可确保引入的任何更改不会降低超过可接受的限制的性能。

Azure 简化

执行测试Azure Pipelines 使你能够将性能测试集成到 CI/CD 管道中。 可以将负载测试合并为管道中的一个步骤,以验证应用程序的性能和可伸缩性。

Azure Chaos Studio 提供了一种将实际故障注入应用程序的方法,以便可以运行受控的故障注入试验。 这些试验可帮助你衡量、了解和改进云应用程序和服务的复原能力。

Azure 负载测试 是一项负载测试服务,可对任何应用程序生成大规模负载。 负载测试提供自动执行负载测试并将其集成到持续集成和持续交付 (CI/CD) 工作流的功能。 可以定义测试条件,例如平均响应时间或错误阈值,并根据特定的错误条件自动停止负载测试。 负载测试提供仪表板,用于在负载测试期间提供 Azure 应用程序组件的实时更新和详细资源指标。 可以分析测试结果,识别性能瓶颈,并比较多个测试运行,以了解随时间推移的性能回归。

分析结果Azure Monitor 是一种全面的监视解决方案,用于从云和本地环境收集、分析和响应遥测数据。 Application Insights 是监视器的扩展,可提供 APM 功能。 可以在开发和测试期间以及生产环境中使用 Application Insights 监视应用程序。

权衡:测试需要时间和技能才能执行,并可能影响运营效率。

性能效率清单

请参阅完整的建议集。