如何进行性能测试

Posted on Wed, 25 Dec 2024 10:36:04 +0800 by LiangMingJian


概述

性能测试是一种通过模拟用户操作和系统负载,来评估在不同条件下,系统的响应时间、吞吐量、资源利用率等指标的测试方法。性能测试的核心在于模拟真实场景中的各种负载情况,来验证系统是否满足预期的性能需求。

性能测试强调系统在高并发、大数据量或长时间运行下的表现,确保系统能高效、稳定地处理用户请求。

性能测试的流程

下面以一个标准的 Web 网站的性能测试来介绍流程。

第一:性能需求点的获取

对于一个 Web 网站,简单来说,其性能需求点在于:

  • 同一时间内,网站最大能支持多少人进行访问。
  • 在大访问量时,网站的响应时间是否可以接受。

对于上面两点,我们应该要考虑到性能瓶颈可能会出现在以下地方:

  • 带宽
  • 硬件(CPU、内存、磁盘等)

在大部分情况下,带宽瓶颈会早于其他瓶颈先行达到。

综上,对于 Web 性能测试,我们应当在服务器使用 top,btop 等工具监听上述性能瓶颈,以完成性能测试。

第二:性能测试点的提取

考虑到上述性能需求中的性能瓶颈,我们应当设计测试点针对性的测试带宽瓶颈和硬件瓶颈。

对于带宽瓶颈,我们应当将正常用户访问网站某一个界面(一般是首页)时所请求的所有资源(包括接口,JS,CSS 在内的所有文件)作为测试点。

JS,CSS 等资源文件占用大量的传输带宽,因此在测试带宽瓶颈时,应当考虑这些内容。

一般来说,我们可以通过浏览器调试工具(F12)获取这些内容。

特别的,通过底部的已传输数据统计,我们还可以简单的评估在带宽瓶颈到达时最大的访问量。比如带宽为千兆网络(1000 Mbps = 1000/8 = 125 MB/s)时,因为一个网页需要传输 1.5 MB 数据,因此简单计算有 125 / 1.5 ~= 83/s,即简单计算时,每秒最多 83 个网页同时加载。

对于硬件瓶颈,我们应当将平台核心功能点的 HTTP 接口作为测试点。

服务器硬件资源利用主要在数据库查询,特定功能执行,资源写入读取等时候进行,而这些内容的执行都通过 Web 网页中的 HTTP 接口进行调用,而这些 HTTP 接口带宽占用几乎忽略不计,因此在考虑硬件瓶颈时,应当考虑这些内容。

一般来说,我们需要通过研发提供的接口文档来选择核心功能点,当然也可以通过浏览器调试工具(F12)获取这些内容。

第三:测试环境的部署

在提取测试点后,我们便可以准备测试环境了。

在性能测试时,因为会对平台进行加压,一般不建议直接在主要平台上进行测试,推荐另外使用一个配置一样,版本一样的备用服务器作为测试负载主机。

另外,考虑到单台测试客户端自身的性能瓶颈问题,应当准备更多的测试客户端进行备用,在单台测试客户端满载时,使用另外的测试客户端进行加载,给测试主机提供更大的压力。

第四:测试的进行

测试的进行一般推荐使用工具 Apache JMeter,官网地址: https://jmeter.apache.org 。

测试计划的构建可以查阅官方文档: Building a Test Plan 或 Building a Web Test Plan

第五:输出测试报告

测试报告应当包括如下内容:编写目的,测试指标,测试环境(测试客户端配置,负载服务器配置),测试工具,负载服务器空载信息,负载服务器在各种加压环境下的测试分析,测试结论。

性能测试的指标

TPS,Transaction Per second,每秒事务处理

每秒钟系统能够处理事务的数量,它是衡量系统处理能力的重要指标。需要注意的是,一个系统的性能是由 TPS 决定,跟测试时负载的并发数没有多大关系。因为在同样的 TPS 下,可以用不同负载并发用户去压测得到(测试时的并发只是为了测出最大的 TPS)。

事务,Transaction,它是指用户某一步或几步操作的集合,比如对接口的一次访问,对某一个资源的下载。

RT,Respond Time,响应时间

Web 网页响应 HTTP 请求的时间。测试时可参考 2/5/8 原则,即 2 秒之内用户觉得很快,5 秒之内用户觉得还可以,8 秒之后用户觉得系统很慢,不能接受。

Throughput,吞吐量

在一次性能测试过程中网络上传输的数据量的总和。

性能测试的目的

  • 发现系统的瓶颈,验证性能需求,为调优指明方向;
  • 考察系统的稳定性,检查系统在长时间的压力下是否能正常处理各种请求;
  • 分析硬件资源(如 CPU、内存)的消耗情况,针对性优化资源;

性能测试的分类

我们常说的负载测试和压力测试都属于性能测试,但两者关注的重点不一样:

维度负载测试 (Load Testing)压力测试 (Stress Testing)
‌测试目的‌验证系统在预期负载下的性能和稳定性。探测系统在极端负载下的极限、稳定性和恢复能力。
‌测试重点‌‌性能指标‌是否达标(如响应时间、吞吐量)。‌系统行为‌在过载时的表现(如是否崩溃、错误处理、能否恢复)。
‌测试方法‌逐步增加负载至正常或峰值水平,观察系统表现。持续增加负载直至系统崩溃或出现故障。
‌关注结果‌性能指标是否满足需求(如响应延迟)。系统崩溃的临界点、故障恢复能力。