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