性能测试建议
适用于此 Power Platform Well-Architected Performance Efficiency 清单建议:
PE:05 | 测试性能。 在与生产环境匹配的环境中执行定期测试。 将结果与性能目标和性能基准进行比较。 |
---|
本指南介绍了测试建议。 性能测试可帮助您评估各种情况下工作负荷的功能。 它涉及测试工作负载的响应时间、吞吐量、资源利用率和稳定性,以帮助确保工作负载满足其性能要求。
测试有助于防止性能问题。 还可以确保您的工作负荷满足其服务级别协议。 如果不进行性能测试,工作负载可能会遇到性能下降,而这些性能下降通常是可以避免的。 工作负载性能可能会偏离性能目标和既定基线。
定义
术语 | 定义 |
---|---|
混乱测试 | 一种性能测试,旨在通过故意引入随机和不可预测的故障或中断来测试系统的弹性和稳定性。 |
负载测试 | 一种性能测试,可衡量典型负载和大量负载下的系统性能。 |
性能基线 | 组指标,表示通过测试验证的正常条件下工作负载的行为。 |
压力测试 | 一种性能测试,对系统执行重载,直到系统中断。 |
综合测试 | 模拟应用程序中的用户请求的性能测试。 |
关键设计策略
性能测试可帮助您在工作负荷中收集可度量的数据。 尽早运行测试有助于按照正确的规范构建工作负载。 因此,应尽快在开发生命周期中执行性能测试。 通过早期测试,您可以在投入生产之前发现并修复性能问题。 如果生产代码尚未准备就绪,可以使用概念证明 (POC)。
如果必须在特定时间窗口内完成从先前系统迁移数据和迁移,则性能测试应包括测量数据迁移的性能。
准备测试
准备性能测试是指设置和安排需要有效执行性能测试的资源、配置和测试方案。 一个好的性能测试应该模拟用户在现实生活中如何使用你的解决方案。 它还应该帮助您验证解决方案是否满足您的性能目标。
定义验收标准
验收标准指定工作负载需要满足的性能要求才能被视为可接受或成功。 定义与绩效目标一致的标准。
审查绩效目标。 性能目标定义您的工作负荷所需性能级别。 查看针对工作负荷确定的性能目标。 性能目标是可能涉及响应时间、吞吐量、资源利用率或任何其他相关性能指标的指标。 例如,您的响应时间可能低于某个阈值,例如小于 2 秒。
定义验收标准。 将性能目标转换为可用于评估工作负荷性能的特定接受条件。 例如,假设响应时间的性能目标为 2 秒或更短。 验收标准可以是工作负载的平均响应时间应该少于 2 秒。 使用这些接受条件确定工作负荷是否满足所需性能级别。
定义接受条件时,应重点关注用户及其期望。 接受条件可帮助确保已交付的工作满足用户的需要和要求。 在将用户视角纳入验收标准时,请记住以下注意事项:
用户角色:了解同时使用解决方案的用户的数量和类型。 定义代表不同角色、位置、安全配置、数据集和活动的用户角色。
用户要求:了解工作负荷的用户需要和目标。 考虑工作负载应如何执行以满足这些要求。 定义反映用户在典型一天中执行的操作的日常生活场景。 包括高负载和普通加载方案。
用户体验:定义捕获所需用户体验的验收标准。 包括响应时间、可用性、可访问性和总体满意度等因素。
功能需求:解决用户希望在工作负载中看到的特定功能。 定义有关这些功能要求的接受条件,以帮助确保满足这些要求。 对每个方案使用真实的数据量。 请勿使用用户所需的更多或更少数据。
基础结构要求:为每个方案定义切合实际的基础结构要求。 例如,如果用户将从连接性较差的移动设备访问解决方案,请在这些条件下测试解决方案。
使用案例:考虑用户可能遇到的不同情形或案例。 基于这些使用案例定义接受条件以在真实的情况下验证工作负荷的性能。
设置接受阈值。 确定指示工作负荷是否满足性能目标的接受条件中的阈值。 这些阈值定义每个度量的可接受的性能范围。 例如,假设响应时间的验收标准小于 2 秒。 您可以将阈值设置为 2.5 秒。 此级别表示任何超过 2.5 秒的响应时间都被视为性能问题。
定义通过标准。 建立用于确定工作负荷是否通过性能测试的条件。 您可以将通过定义为满足所有验收标准或达到其中的一定百分比。
选择检测类型
要选择正确的性能测试类型,请务必使测试与验收标准保持一致。 验收标准定义了将要求或错误修复视为完成所需的条件。 性能测试旨在验证工作负荷是否满足这些接受条件并按预期方式在指定条件下执行。 使性能测试类型与验收标准保持一致有助于确保测试侧重于满足标准定义的性能预期。
了解验收标准。 查看要求或 bug 修复的验收标准。 这些标准概述了要满足的特定条件和功能。
确定相关的绩效指标。 根据接受条件,确定对实现所需结果至关重要的性能指标。 例如,如果验收标准侧重于响应时间,则确定负载测试的优先级可能是合适的。
选择适当的测试类型。 评估可用的测试类型,并选择最符合已确定的性能指标和验收标准的测试类型。
下表提供了测试类型示例及其使用案例。
测试类型 | Description | 用例 |
---|---|---|
负载测试 | 模拟真实的用户负载,以衡量工作负载在预期峰值工作负载下的性能。 | 确定负载容限。 |
压力测试 | 将工作负荷推送超出正常限制以确定其中断点并衡量其恢复能力。 | 确定弹性和稳健性。 |
浸泡试验(耐久性试验) | 在长时间内以持续高负载运行您的工作负荷,以确定性能降低、内存泄漏或资源问题。 | 评估一段时间的稳定性和可靠性。 |
尖峰测试 | 模拟用户负载的突然增加,以评估工作负载如何处理需求的突然变化。 | 衡量在高峰期间进行扩展和维护性能的能力。 |
兼容性测试 | 跨各种平台、浏览器或设备测试工作负荷的性能。 | 可帮助确保跨各种环境实现一致的性能。 |
根据工作负荷的特征和要求,设置所选测试类型的优先级。 考虑诸如绩效指标的关键性、用户期望、业务优先级以及已知问题或漏洞等因素。
选择测试工具
根据要运行的性能测试的类型选择适当的工具。 评估测试环境的基础结构、资源和约束。 选择支持所需测试类型的测试工具,并提供监视、衡量、分析和报告的必要功能。
应用程序性能监控 (APM) 工具提供对应用程序的深入洞察,是必不可少的测试工具。 它可以帮助您跟踪单个事务并通过各种工作负荷服务映射其路径。 测试后,您应使用 APM 工具根据性能基线分析和比较测试数据。
使用分析工具识别代码中的性能瓶颈。 探查功能可帮助确定代码占用最多资源并需要优化的区域。 它可以提供对代码不同部分的执行时间和内存使用情况的见解。
下列步骤可帮助您选择适当的测试工具:
确定测试要求。 首先了解性能测试的特定要求。 考虑各方面因素:
- 工作负载的类型
- 要衡量的性能指标,例如响应时间和吞吐量
- 工作负荷体系结构的复杂程度
- 测试环境,例如基于云的部署、本地或混合
研究测试工具。 通过研究确定符合您要求的性能测试工具。 考虑市场上可用的商业和开源工具。 查找支持所需性能测试类型(如负载测试或压力测试)的工具,并提供用于测量性能指标的功能。
评估工具功能。 评估每个测试工具提供的功能。 寻找诸如模拟真实用户行为和可伸缩性等功能,以处理大量用户负载。 考虑对各种协议和技术的支持、与其他测试工具或框架的集成以及报告和分析功能。
考虑兼容性和集成性。 确定测试工具是否与现有基础结构及技术兼容。 确保这些工具可以轻松集成到您的测试环境中,并且可以与监视和分析所需的工作负载进行通信。
评估成本和许可。 评估与测试工具关联的成本结构和许可条款。 考虑初始投资、维护成本和支持成本等因素。 此外,还可以考虑依赖于用户数量或虚拟用户的其他许可要求。
进行 POC(概念验证)。 根据您的评估,选择一些看起来最合适的工具。 执行小规模 POC,以验证工具在特定测试场景中的可用性、功能和有效性。
考虑支持和培训。 评估工具供应商或社区提供的支持和培训级别。 确定文档、教程和技术支持渠道的可用性,以帮助解决测试过程中可能出现的任何挑战或问题。
创建测试方案
创建测试方案是指设计适用于测试工作负荷性能的特定情况或条件的过程。 创建测试方案是为了模拟真实的用户行为和工作负载模式。 通过这些应用方案,性能测试人员可以评估工作负荷在各种条件下的执行方式。
通过测试方案,可以复制各种工作负载模式,例如并发用户访问、峰值负载周期或特定事务序列。 通过在不同的工作负载模式下测试工作负载,您可以识别性能瓶颈并优化资源分配。
定义用户行为。 通过识别用户在与工作负载交互时执行的步骤和操作,模拟真实的用户行为和工作负载模式。 考虑诸如登录、执行搜索、提交表单或访问特定功能等活动。 将每个方案分解为表示用户与工作负载交互的特定步骤和操作。 可以包括浏览页面、执行事务或与工作负载的各种元素进行交互。
确定数据参与。 确定运行测试方案所需的测试数据。 您可以包括创建或生成表示各种方案、用户配置文件或数据量的实际数据集。 确保测试数据多样化并涵盖不同的用例,以提供全面的性能评估。
设计测试脚本。 创建测试脚本以自动执行定义的测试方案。 测试脚本通常由一系列操作、HTTP 请求或与工作负荷 API 或用户界面交互组成。 使用性能测试工具或编程语言编写脚本,并考虑参数化、关联和动态数据处理等因素。 验证测试脚本的正确性和功能性。 调试任何问题,例如脚本错误、操作缺失或不正确,或者与数据相关的问题。 测试脚本验证对于帮助确保精确可靠的性能测试执行至关重要。
配置测试变量和参数。 在测试脚本中配置变量和参数,以引入可变性并模拟真实场景。 包括用户凭据、输入数据或随机化等参数以模拟不同的用户行为和工作负荷响应。
迭代优化脚本。 根据反馈、测试结果或更改要求,持续优化和改进测试脚本。 考虑优化脚本逻辑、参数化和错误处理,或者添加额外的验证和检查点。
配置测试环境
配置测试环境是指设置创建与生产环境非常相似的环境所需的基础结构、软件和网络配置的过程。
若要以提高性能效率的方式设置测试环境,请在配置过程中包括以下步骤:
镜像您的生产环境。 设置您的测试环境类似于您的生产环境。 请考虑环境设置和区域、网络设置、安全设置、数据源和集成等因素。 目标就是确保性能测试结果代表真实的条件。
提供充足的资源。 为测试环境分配足够的资源,例如存储容量。 确保可用资源可以处理预期的工作负荷并提供准确的性能度量。
复制网络条件。 在测试环境中配置网络设置,以在实际工作负载部署期间复制预期的网络条件。 您需要包括带宽、延迟和网络协议。
安装和配置依赖项。 从 AppSource 安装工作负载正常运行所需的任何应用和其他依赖项。 这包括使用预期生产配置配置第三方服务。
权衡:维护单独的测试环境、存储数据、使用工具和运行测试会产生成本。 了解性能测试的成本并寻找可优化花费的方法。
风险:生产数据可能包含敏感信息。 如果没有强大的清理和屏蔽策略,则在使用生产数据进行测试时,可能会泄露敏感数据。
执行测试
使用所选的测试工具运行性能测试。 测试包括测量和记录性能指标,监控运行状况,以及捕获任何出现的性能问题。
监控和收集性能指标,如响应时间、吞吐量和其他相关指标。
使用定义的测试方案将工作负荷置于预期负载下。 在这些不同的加载条件下执行测试。 例如,使用级别(如普通、高峰和压力级别)来分析各种情况下的工作负荷行为。
在规划和运行性能测试时,请务必记住,在许多情况下,Microsoft 云使用共享基础结构来托管你的资产和属于其他客户的资产。 限制测试以避免意外后果。
记录结果
清楚且一致地记录您的性能测试结果。 您的文档应显示:
- 您的解决方案是否满足每个方案的性能目标
- 何时运行每个测试以及运行方法
- 您测试的解决方案的版本
- 测试期间出现的任何错误或问题
- 在测试之后进行的任何更改或优化
分析结果
分析测试结果涉及检查性能测试所收集的数据和度量,以获得对工作负荷性能的见解。 目标是确定性能问题并使用反馈来调整应用程序开发中的优先级。
下列操作是分析测试结果的关键步骤。
查看性能指标。 查看在性能测试期间收集的性能指标,例如响应时间、吞吐量、错误率和网络延迟。 分析这些度量可了解工作负荷的整体性能。
识别瓶颈。 评估性能指标,以确定任何瓶颈或性能低效的领域。 评估可能包括高响应时间、资源限制、数据库问题、网络延迟和可伸缩性限制。 查明这些瓶颈的根本原因有助于确定性能改进的优先级。
关联度量。 评估各种性能指标之间的关系和相关性。 例如,分析增加的负载或资源利用率如何影响响应时间。 了解这些关联可提供对不同条件下的工作负荷行为有价值的见解。 查找性能数据随时间推移的模式和趋势。 分析不同负载水平或特定时间段下的性能。 检测趋势有助于识别季节性变化、高峰使用时间或反复出现的性能问题。
评估验收标准。 将重新测试结果与预定义的接受条件和性能目标进行比较。 评估工作负荷是否满足所需性能标准。 如果工作负载不符合验收标准,请进一步调查和优化优化。
迭代和优化分析。 根据需要进行其他调整和改进。 使用收集的数据和指标诊断特定性能问题。 诊断可能会涉及通过工作负荷组件进行跟踪、检查日志文件、监视资源使用情况或分析错误消息。 深入研究数据,以了解性能问题的原因。
根据对测试结果的分析,确定性能问题的优先级,并执行必要的改进。 这些改进可以包括优化逻辑、优化查询、改进缓存机制和优化网络配置。
确立基线
基线为比较一段时间内的性能结果提供了一个参考点。 基线应该是具有实际意义的工作负荷性能快照 - 无需将每个测试用作基线。
考虑工作负载目标,并记录性能快照,以便您随着时间的推移进行学习和优化。 使用这些基线测量值作为未来性能测试的基准,并使用它们来识别任何降级或改进。
若要建立性能测试的基线,并将其用作将来性能测试的基准,请按照下列步骤操作:
确定性能指标。 确定要衡量和跟踪的特定绩效指标。示例包括:
- 响应时间,即工作负载响应请求的速度。
- 吞吐量或每单位时间处理的请求数。
- 资源利用率,例如存储空间的使用情况。
记录有意义的测量结果。 将测试期间获取的绩效度量记录为基线度量。 这些测量值代表了比较未来性能测试的起点。
比较未来的测试。 在后续性能测试中,将性能度量与确立的基线和阈值进行比较。 通过比较,您可以确定性能的任何改进或下降。
连续测试
持续测试涉及对测试的持续监控和改进。 持续测试可帮助您保持一致且可接受的性能水平。 工作负载应提供相对于基线的一致且可接受的性能级别。 应随时间推移调整工作负载,以产生在可接受的性能限制内的一致性能。
以下是一些关键实践:
设置降级限制。 定义数字阈值,以指定随时间推移可接受的性能下降级别。 通过设置这些限制,您可以监控性能波动,并在性能低于定义的阈值时接收警报。
包括质量保障。 将性能要求(例如每秒最大请求数)纳入质量保证流程。 将性能要求视为与功能要求同等重要级别。 此过程有助于确保工作负荷在部署到生产之前满足定义的性能要求。
自动发出警报。 在实时环境中,快速检测和响应至关重要。 设置使用性能基线作为参考的自动警报系统。 如果性能出现重大偏差,则会立即提醒必要的团队采取行动。
测试更改。 某些性能问题可能只体现在实时设置中。 对建议的更改应用透彻的测试做法。 使用代码检测深入了解应用程序的性能特征,例如热路径。 此测试确保引入的任何更改不会降低性能超出可接受的限制。
Power Platform 便利化
执行测试:Azure Pipelines 使您能够将性能测试集成到 CI/CD(持续集成/持续交付)管道中。 可以将负载测试合并为管道中的一个步骤,以验证应用程序的性能和可伸缩性。
Power Apps 测试引擎是 Power Platform CLI 中的一个组件,可用来测试 Power Apps 中的独立画布应用程序。
Azure Test Plans 是一种易于使用、基于浏览器的测试管理解决方案,它提供计划内手动测试、用户验收测试、探索性测试以及从利益干系人那里收集反馈所需的所有功能。
如果您的工作负载包括 Azure 资源,您可以使用 Azure Chaos Studio 和 Azure 负载测试来执行测试。
在开发过程中,开发人员还可以使用 Power Apps Monitor 更快地诊断和解决问题,并构建更可靠的应用程序。 它可以记录应用运行时发生的所有关键活动,让您深入了解此应用。 Power Apps Monitor 还能让您更好地了解应用程序中包含的事件和公式是如何工作的,因此您可以提高性能并识别任何错误或问题。
如果您的工作负载包含 Microsoft Copilot Studio 代理,您可以使用 Power CAT Copilot Studio 工具包配置代理和测试。 通过针对 Copilot Studio 应用程序接口(Direct Line)运行单个测试,根据预期结果对代理响应进行评估。
分析结果:Azure Monitor 是一种全面的监视解决方案,用于从云和本地环境中收集、分析和响应遥测数据。 Application Insights 是 Azure Monitor 的扩展,提供 APM 功能。 您可以使用 Application Insights 在开发和测试期间以及生产中监控应用程序。
权衡:测试需要时间和技能来执行,并且会影响运营效率。
相关信息
性能效率清单
请参考整套建议。