性能测试

什么是性能测试及其重要性?


 

性能测试衡量网站、网络应用或API在流量、并发用户和交易量变化时的响应能力。它帮助团队在用户受到影响之前,评估响应时间、吞吐量、错误率、稳定性和可扩展性。



Performance test dashboard showing response time and throughput curves as concurrent users ramp up against a web application

性能测试概述

性能测试是在网站、Web 应用程序或 API 上施加一定数量的并发用户或请求,按照计划的曲线逐渐增加需求,并记录变化情况:响应时间、吞吐量、错误率,以及系统为保持响应所使用的服务器、数据库和网络容量。输出结果是一组数字,用于与目标值比较,而非对网站速度的主观感受。

目标可以是公共网站、通过门户或 SaaS 应用程序的身份验证流程、一系列 API 调用,或防火墙后的内部 Web 应用程序。

目标不是让网站总体加速,而是确认其最重要的页面、工作流程和 API 调用在预期流量下满足定义的要求。一个结账流程对单个用户可能正常,但当数百客户同时下单时可能变慢或超时。

功能测试确认页面或交易正常运作。性能测试衡量随着流量增加,页面或交易是否仍保持快速、稳定和可靠。

你可以进行哪些性能测试?

性能测试通常涵盖四种 HTTP/S 目标:网站、Web 应用程序、API 和内部 Web 应用程序。每种目标需要不同的脚本和测量方式。

目标测试测量内容典型流程
网站随着访客流量上升,页面响应和稳定性,包括对 Web 服务器、CDN、源站和外部脚本的影响。主页、着陆页、产品页、站内搜索。
Web 应用程序并发用户执行业务多步骤流程,包括真实浏览器渲染和执行 JavaScript 的时间。登录、搜索、表单、购物车、结账、门户、身份验证仪表盘。
API端点响应时间、吞吐量、错误率、身份验证、有效负载处理以及不同请求量下的多步骤调用序列。REST 和 SOAP 端点,令牌交换后的数据调用,移动端和合作伙伴后台。
内部 Web 应用程序针对无法通过白名单静态 IP 或内部加载注入器从公网上访问的系统,执行上述所有测量。内联网、人力资源和财务门户、预发布环境。

为什么性能测试很重要

性能测试的价值在于在用户发现问题之前给出明确答案:

  • 瓶颈在发布前暴露。缓慢查询或连接池不足会出现在测试报告中,而不是客户支持队列。
  • 容量和扩展计划得到验证。自动扩展规则、CDN 缓存设置和实例大小在流量验证之前都是假设。
  • 实现收益的流程得以保护。登录、搜索、结账、文件上传及其背后的 API 调用是优先测试的路径。
  • 高峰活动减少慢响应、错误和宕机。活动发布、促销、注册窗口和季节性销售通常有可预测的流量模式,可提前测试。
  • 回归问题被捕捉。代码、API、数据库、基础设施和外部服务的变更都会对性能产生细微影响,且累积于多个发布。
  • 发布决策和服务等级目标有事实依据。一个对目标的 p95 数字比“感觉慢”更易于行动。

性能测试的类型

每种类型采用不同的流量形态,以回答不同问题。大多数方案会组合多种类型。

测试类型回答的问题典型用途
负载测试系统能否承受预期和峰值负载?确认计划中的活动或正常周一早晨的响应时间和错误目标达成。
压力测试系统在哪些点失败?如何恢复?超越峰值负载,找出首个故障组件,加载下降时检验恢复。
突发测试需求骤升或骤降时会怎样?闪购、票务发售、电视广告播出、推送通知及其恢复过程。
耐久(浸泡)测试长时间运行是否会导致性能下降?维持正常负载数小时,暴露内存增长、连接泄漏、磁盘占用及缓存过期。
容量测试系统能处理多大量数据?大目录、批量导入、报告生成和大表搜索。
可扩展性测试扩容后系统性能是否提升?检查实例数量翻倍或自动扩展限制提升后,支持的用户数是否相应增加。
容量测试当前系统在接收标准下能支持多少并发用户、请求或交易?为容量规划和向销售及市场承诺设定明确上限。
基线测试未来改动将基于何种参考结果?在发布、迁移或基础设施变动前记录参考运行。

耐久测试和浸泡测试是同一种测试的两个名称,不是两种类型。负载测试和压力测试之间的界线也是团队最常混淆的,单独有页面讨论:负载测试与压力测试。

Diagram showing performance testing as the parent category with eight test types beneath it: load, stress, spike, endurance, volume, scalability, capacity, and baseline

性能测试是总类。每种类型改变流量大小、速率和持续时间。

性能测试与负载测试的区别

性能测试是评估系统在不同条件下速度、稳定性、扩展性和资源利用的广义实践。负载测试是性能测试的一个子集,聚焦于预期和峰值流量。

术语常被混用,因为负载测试通常是团队首次运行的性能测试。其他类型测试用于发现系统崩溃点、长期性能衰退或扩展问题。

性能测试负载测试
范围多个测试类型的总类别性能测试的一个类型
主要问题系统在定义条件下的表现如何?能否处理预期与峰值流量?
可能的条件基线、负载、压力、突发、耐久、容量与扩展性测试真实的正常和峰值流量
输出关于速度、稳定性、扩展性、资源使用和瓶颈的证据关于随着用户或交易增加性能变化的证据

包含压力测试的比较,请阅读性能测试 vs. 压力测试 vs. 负载测试。

如何进行性能测试

以下步骤适用于着陆页、结账流程或身份验证的 API 序列。

1. 定义目标和验收标准

明确测试必须证明的数字要求。例如:结账流程在 1,500 并发用户时,p95 响应时间小于 2 秒;错误率低于 0.5%;订单 API 支持每秒 400 笔交易。没有通过/失败标准的测试只能产生数据,无法做出决策。

2. 建模网站、应用或 API 流量

采集网站分析、访问日志、APM 数据和业务预测。识别关键页面或流程,流量如何分配,高峰并发,请求率,步骤间思考时间,地域分布和每个会话的 API 调用数。页面浏览量不等于并发用户:每日 100,000 次页面浏览,峰值并发可能只有几百个会话,模型应明确说明。

3. 准备代表性测试环境

尽量匹配生产的 Web 堆栈、应用版本、数据库容量、CDN 和缓存行为、API 依赖、集成和扩展规则。使用安全的测试账号和支付沙盒。环境必须差异化时,记录差异,避免误将结果视为生产保证。

4. 选择测试类型和方法

根据步骤 1 的问题选择负载、压力、突发、耐久、容量、扩展性或组合测试。然后确定生成流量的方法。HTTP/S 测试直接发送请求,适合对页面和 API 进行高请求量测试。真实浏览器测试运行 JavaScript,跟踪多步骤用户行为,更准确测量用户等待时间。许多团队同时进行协议测试以覆盖规模,以及少量真实浏览器用户测试用户体验。

5. 建立基线

在不变条件下运行中等负载控制测试,确认脚本完成、测试数据有效,负载生成器非瓶颈。记录结果和测试条件,以便后续因缓存、测试数据或环境差异导致的比较失真有据可查。

6. 运行测试并监控整体系统

沿计划的负载曲线(平滑攀升、阶跃或突发)逐步增加压力,而非一次施加未说明数量的用户。收集 Web 服务器、应用、基础设施、数据库、网络和外部服务的数据,与测试结果一同分析。无服务器端数据,只能确认性能下降,却无法定位原因。

7. 分析瓶颈

先与验收标准对比结果,然后在同一时间窗口内,将缓慢交易或错误与 CPU、内存、数据库、缓存、队列、连接池、网络及依赖行为关联分析。定位到具体组件及其性能下降条件时停止,不要仅停留在平均响应时间。

8. 修复、复测和自动化

每次改变一个关键变量,重复相同场景并与基线比较。随后将更小的回归测试纳入 CI/CD,关键交易每次构建均运行,大型测试安排于主要发布、活动和季节高峰前。

关键性能测试指标

测试指标描述用户体验,系统指标帮助解释原因。两者均需在同一测试周期内收集,以定位原因。

指标显示内容如何使用
响应时间分位数 (p50, p95, p99)典型、慢速及最慢请求所需时间。设置 p95 或 p99 目标。平均值隐藏慢请求,分位数显示慢速用户体验。
吞吐量(每秒请求或交易数)系统每秒完成的工作量。绘制吞吐量与负载关系。当吞吐量趋于平稳而用户数继续上升时,即达瓶颈。
错误率和超时率返回错误或无响应请求比例。设定硬性限制。响应时间达标但错误率 3% 的测试视为失败。
并发用户或活跃会话数各时刻活跃的模拟用户数。用作 x 轴,非唯一目标。需搭配响应时间、吞吐量和错误率一起分析。
CPU 利用率应用和数据库服务器的计算资源使用率。当延迟上升时 CPU 持续接近 100%,指示计算资源瓶颈或容量不足。
内存利用率及增长运行时内存使用及增长趋势。负载稳定时内存持续增长,表明内存泄漏、缓存扩增或未释放对象。
磁盘与网络活动I/O 吞吐、延迟及带宽使用。CPU 和内存正常但响应时间上升时需检查。
数据库查询时间、连接数与锁等待查询持续时间、打开连接数、锁等待时间。比对加慢的交易。连接池耗尽往往先在这里显现。
队列深度或积压消息、任务或请求队列中待处理工作量。负载稳定时积压增加,表示消费者跟不上生产者。
浏览器时序首字节时间、DOM 准备、页面加载及各元素加载时间。区分服务器端慢和浏览器脚本、外部标签、资源交付问题。

测试指标识别症状,服务器、数据库和监控数据定位原因。LoadView 性能报告覆盖测试端,从汇总图表到每个会话的瀑布图,帮助追踪慢交易。但服务器端数据需通过自有监控或 APM 与测试时间线匹配采集。

如何解读性能测试结果

多数 Web 系统表现出以下几种模式。单一模式不足以断定根因,但指示后续调查方向。

观察现象调查方向
响应时间上升,吞吐量停止增长系统达到饱和,找出率先达到瓶颈的资源:CPU、连接、线程或下游依赖。
CPU 接近饱和且延迟上升高 CPU 需求、低效代码路径或容量不足。
长时间测试中内存持续增长内存泄漏、无界缓存、未释放会话对象或垃圾回收滞后。
连接数达到上限后错误率上升数据库连接池、下游服务限制、负载均衡或 Web 服务器连接限制,或速率限制。
单条交易变慢,其余稳定该交易的代码路径及依赖:特定查询、外部服务调用、锁或同步报告。
浏览器时间增加,服务器响应平稳浏览器 JavaScript、外部脚本、大资源或受测试区域内 CDN 行为影响。
Chart of a load test showing throughput flattening and response time climbing sharply after the saturation point as concurrent users increase

当吞吐量平稳且响应时间开始快速上升时,系统很可能已达到容量极限。

何时执行性能测试

性能测试非发布前一次性的任务。典型触发时机:

  • 设计早期,在架构和重要用户路径确定阶段,变更成本低。
  • 关键变更后,包括代码、数据库模式、基础设施或集成的变更,以及外部脚本和 CDN 配置调整。
  • 在 CI/CD 流程中,对关键交易进行简短回归检查。
  • 重大发布、活动、季节高峰和迁移前,以事件预测流量水平开展测试。
  • 生产事件后,确认修复在触发条件下有效。
  • 定期执行,捕获无单次发布导致的性能漂移。

性能测试与网站速度测试的区别

网站速度测试通常在无其他流量干扰下,加载单一页面或会话,报告加载耗时,适用于前端优化和版本间对比。

性能测试施加变化量级的流量或并发用户,观察网站、应用或 API 随需求增加的表现。两者均报告页面或响应时间,但性能测试额外测量系统承载用户数、峰值错误率、吞吐量瓶颈和稳定持续时长。速度测试表现出色的页面,在数百并发会话下仍可能失败。

如何选择性能测试工具

评价云性能和负载测试工具时,应根据需执行的测试类型,而非单纯功能数量:

  • 支持网站、多步骤 Web 应用及所使用的 API 协议,包括鉴权流程。
  • 能模拟真实流量:浏览器路径、API 序列、思考时间、数据变异和可调整的负载曲线。
  • 提供满足峰值需求的足够规模,且测试节点分布符合用户区域。
  • 支持协议测试、真实浏览器测试或两者结合,视测量需求而定。
  • 生成有用的分布指标、错误详情、每交易结果及可与非测试人员共享的报告。
  • 集成 CI/CD 及服务器端监控、可观测性工具。
  • 支持防火墙内测试内部应用。
  • 便于负责创建和复测的人员维护。

性能测试最佳实践

  • 从具体的业务或工程问题出发,设计测试方案。
  • 基于分析、日志和预测构建负载模型,而非凭猜测。
  • 测试登录、搜索和结账等关键交易,而非仅主页。
  • 使用现实数据量和尽可能匹配生产环境,差异须记录。
  • 区分被测系统问题和负载生成配置限制。先检查负载生成器 CPU 和网络。
  • 聚合分布指标、错误、吞吐和服务器资源数据在同一时段分析。
  • 诊断时一次变动一个关键变量。
  • 保存基线,每次改动后比较同一场景。
  • 包含外部依赖和地域延迟,确保覆盖真实用户路径。

使用 LoadView 进行性能测试

LoadView 是云端负载测试平台,可测量网站、多步骤 Web 应用和 API 在不同流量下的性能。流量源自托管云,无需建设维护负载生成基础设施。

针对请求量问题,HTTP/S 测试发送数千并发请求,报告响应时间、吞吐量和端点错误。针对用户路径问题,Web 应用负载测试在真实浏览器中运行脚本,测量 JavaScript 执行和渲染时间。脚本用 EveryStep Web Recorder 录制,只需点击一次路径。API 负载测试覆盖 REST 和 SOAP 端点,包括鉴权和多步骤调用序列。

负载曲线可调:分步负载曲线在设定周期内平滑变化并发用户;基于目标的曲线在固定时间内实现所需交易率;动态可调曲线允许测试过程中调整用户数。流量可来自 40 多个分布区域的地理分布网络,涵盖区域延迟和 CDN 行为。

报告显示执行计划、每分钟交易数、响应时间和错误类型,并配备每会话瀑布图,帮助追踪慢请求。LoadView 与 Jenkins、Azure DevOps 和 CircleCI集成。Jenkins 和 CircleCI 可用失败会话阈值,构建失败当错误率超限。内部应用可通过白名单静态 IP 或本地安装的负载注入器进行防火墙内测试。

LoadView 展示网站、Web 应用或 API 在测试过程中的表现。结合服务器监控或 APM 数据,协助识别响应缓慢或错误的根本原因。

性能测试常见问答

什么是网站或 Web 应用的性能测试?

它施加受控数量的并发用户或请求于网站或应用,记录响应时间、吞吐量、错误率及资源使用随需求变化的情况。结果显示登录、搜索和结账等流程是否在预期和峰值流量下满足定义要求。

性能测试与负载测试的区别是什么?

性能测试是广义类别,负载测试是其中一种,施加预期和峰值负载检查系统是否达标。压力、突发、耐久、容量、扩展性、能力和基线测试是其他类型,各自回答不同问题。见上文对比。

性能测试的主要类型有哪些?

负载、压力、突发、耐久(又称浸泡)、容量、扩展性、能力和基线测试。它们在流量大小、到达速度、持续时间和目的上不同:验证目标、寻找极限或记录参考点。见类型表。

性能测试应测哪些指标?

至少测量:响应时间分位数 (p50, p95, p99)、吞吐量、错误率与超时率,并发用户数。结合服务器 CPU、内存、磁盘、网络活动,数据库查询时间和连接数,及队列深度。网站和 Web 应用还需浏览器时序,观察浏览器端慢响应。

性能测试与网站速度测试有何不同?

速度测试针对单页面单用户,报告加载耗时。性能测试施加多并发用户或请求,测量响应时间、错误率和容量随负载增加的变化。页面速度测试表现好,但在几百并发时仍可能失败。

性能测试能否在 CI/CD 中自动化?

可以。关键交易的短测试可每次构建执行,当错误率或响应时间超限时失败构建。较大型的负载、压力和耐久测试通常定期执行或在重大发布前执行。

性能测试应使用真实浏览器还是 HTTP/S 请求?

根据需求两者兼用。HTTP/S 测试生成大量请求,适合 API 和服务器容量测试。真实浏览器测试执行 JavaScript、渲染页面并跟踪用户多步骤路径,测量真实用户感知等待时间。许多团队使用协议测试覆盖规模,少量真实浏览器用户测试体验。

开始性能测试

有效的性能测试从可衡量的需求开始,基于分析和日志数据构建负载,每次变更后重新运行相同场景以便对比。设定标准,建模流量,针对最重要用户路径运行第一条基线,遵循以上八步骤。

将您的负载测试提升到
下一个层次

体验无与伦比的功能和无限的可扩展性。无需信用卡,无需合同。