需求
项目介绍¶
PetClinic 性能测试的侧重点在于验证系统在多用户并发访问场景下的响应速度、稳定性与资源利用率,以评估其在真实业务负载下的运行表现。测试应重点关注 核心接口与业务流程(如业主信息查询、宠物详情加载、就诊记录提交等)的响应时间、吞吐量及数据库访问性能。通过工具(如 JMeter、LoadRunner)模拟不同并发用户量,分析系统在高负载下的 响应延迟、错误率、内存与 CPU 占用情况,并识别潜在的性能瓶颈。还应进行 压力测试与稳定性测试,验证系统在持续运行及极端负载下的可靠性。整体目标是通过性能测试发现系统在架构设计、数据库交互或前后端协作中的弱点,为 PetClinic 的性能优化与扩展性提升提供量化依据和改进方向。
需求¶
本文档有以下作用:
- 开发人员开发依据
- 设计人员输入源
- 产品经理跟进产品执行实现程度的依据
- 测试人员编写性能测试用例的输入源
- 外部人员产品理解或执行的依据
产品简述¶
产品描述¶
Petclinic 是一个宠物医院系统。系统中可以完成宠物主人信息、宠物信息、宠物主人与宠物的对应关系管理以及宠物医生对应的信息管理。
产品功能¶
对于宠物医院系统来说,只有商家端产品。商家端完成关于宠物主人、宠物和宠物医生的所有管理。
对于宠物主人,可以添加,修改,查询宠物主人信息,还可以为宠物主人添加宠物。对于宠物医生可以进行添加、查询、修改、删除的操作。
也可以添加宠物的类型和宠物医生的特长信息。
专有名词解释¶
| 专有名词 | 描述 |
|---|---|
| Owners | 宠物主人 |
| Last name | 英文姓名中的姓氏 |
| Find Owner | 查询宠物主人信息 |
| TPS | 每秒事务数 |
| RT | 响应时间 |
| CPU | 中央处理器 |
| Memory | 内存 |
| I/O | 输入输出 |
产品总体架构¶
下图为 PetClinic 系统架构图
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端界面 │ │ Spring Boot │ │ 数据库 │
│ (Web UI) │◄──►│ (后端服务) │◄──►│ (H2/MySQL) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ 缓存服务 │
│ (Redis) │
└─────────────────┘
性能测试需求¶
性能指标要求¶
1. 响应时间要求¶
| 功能模块 | 操作类型 | 响应时间要求 | 备注 |
|---|---|---|---|
| 宠物主人搜索 | 查询操作 | ≤ 2秒 | 95%的请求 |
| 宠物主人详情 | 查询操作 | ≤ 1秒 | 95%的请求 |
| 创建宠物主人 | 写入操作 | ≤ 3秒 | 95%的请求 |
| 更新宠物主人 | 更新操作 | ≤ 2秒 | 95%的请求 |
| 删除宠物主人 | 删除操作 | ≤ 1秒 | 95%的请求 |
2. 吞吐量要求¶
| 功能模块 | 并发用户数 | TPS要求 | 备注 |
|---|---|---|---|
| 宠物主人搜索 | 100 | ≥ 50 | 持续5分钟 |
| 宠物主人详情 | 100 | ≥ 100 | 持续5分钟 |
| 创建宠物主人 | 50 | ≥ 20 | 持续5分钟 |
| 更新宠物主人 | 50 | ≥ 25 | 持续5分钟 |
| 删除宠物主人 | 50 | ≥ 30 | 持续5分钟 |
3. 资源使用要求¶
| 资源类型 | 使用率要求 | 备注 |
|---|---|---|
| CPU使用率 | ≤ 80% | 正常负载下 |
| 内存使用率 | ≤ 85% | 正常负载下 |
| 磁盘I/O | ≤ 70% | 正常负载下 |
| 网络带宽 | ≤ 60% | 正常负载下 |
4. 稳定性要求¶
| 测试场景 | 持续时间 | 要求 | 备注 |
|---|---|---|---|
| 正常负载 | 24小时 | 无内存泄漏 | 持续运行 |
| 峰值负载 | 2小时 | 系统稳定 | 峰值压力 |
| 压力测试 | 1小时 | 系统不崩溃 | 极限压力 |
性能测试场景¶
1. 基准测试场景¶
目的: 确定系统在正常负载下的性能基线
测试内容: - 单用户访问各功能模块 - 测量各操作的响应时间 - 记录系统资源使用情况
测试数据: - 并发用户数:1 - 测试持续时间:10分钟 - 操作类型:查询、创建、更新、删除
2. 负载测试场景¶
目的: 验证系统在预期负载下的性能表现
测试内容: - 模拟正常业务负载 - 验证响应时间和吞吐量 - 监控系统资源使用
测试数据: - 并发用户数:50 - 测试持续时间:30分钟 - 操作比例:查询70%,创建15%,更新10%,删除5%
3. 压力测试场景¶
目的: 确定系统的性能极限
测试内容: - 逐步增加负载直到系统性能下降 - 找到系统的性能瓶颈 - 确定系统的最大承载能力
测试数据: - 并发用户数:10-200(逐步增加) - 测试持续时间:2小时 - 操作类型:混合操作
4. 峰值测试场景¶
目的: 验证系统在峰值负载下的表现
测试内容: - 模拟业务高峰期负载 - 验证系统稳定性 - 测试系统恢复能力
测试数据: - 并发用户数:100 - 测试持续时间:1小时 - 操作类型:主要是查询操作
5. 容量测试场景¶
目的: 确定系统在大量数据下的性能表现
测试内容: - 测试大数据量下的查询性能 - 验证数据库性能 - 测试缓存效果
测试数据: - 数据量:10万条宠物主人记录 - 并发用户数:50 - 测试持续时间:1小时
性能测试环境要求¶
1. 硬件环境¶
| 环境类型 | CPU | 内存 | 硬盘 | 网络 | 备注 |
|---|---|---|---|---|---|
| 测试环境 | 4核 | 8GB | 100GB SSD | 千兆网卡 | 功能测试 |
| 性能测试环境 | 8核 | 16GB | 200GB SSD | 千兆网卡 | 性能测试 |
| 生产环境 | 16核 | 32GB | 500GB SSD | 万兆网卡 | 生产环境 |
2. 软件环境¶
| 软件名称 | 版本 | 配置 | 备注 |
|---|---|---|---|
| Java | 11.0.16 | JVM参数优化 | 运行环境 |
| Spring Boot | 2.7.0 | 默认配置 | 应用框架 |
| MySQL | 8.0.30 | 主从复制 | 数据库 |
| Redis | 6.2.7 | 集群模式 | 缓存 |
| Nginx | 1.20.2 | 负载均衡 | 反向代理 |
3. 网络环境¶
| 网络类型 | 带宽 | 延迟 | 丢包率 | 备注 |
|---|---|---|---|---|
| 内网 | 千兆 | < 1ms | 0% | 测试环境 |
| 外网 | 百兆 | < 10ms | < 0.1% | 生产环境 |
性能测试工具¶
1. 压力测试工具¶
| 工具名称 | 版本 | 用途 | 特点 |
|---|---|---|---|
| JMeter | 5.5.0 | 接口压力测试 | 图形化界面,易于使用 |
| Apache Bench | 2.3 | 简单压力测试 | 轻量级,命令行工具 |
| wrk | 4.2.0 | 高性能压测 | 高性能,支持Lua脚本 |
| Gatling | 3.8.0 | 高性能压测 | 基于Scala,性能优秀 |
2. 监控工具¶
| 工具名称 | 版本 | 用途 | 特点 |
|---|---|---|---|
| Prometheus | 2.40.0 | 监控数据收集 | 时间序列数据库 |
| Grafana | 9.3.0 | 监控数据可视化 | 丰富的图表展示 |
| JProfiler | 13.0.0 | Java性能分析 | 专业的Java性能分析工具 |
| VisualVM | 2.1.0 | JVM监控 | 免费的JVM监控工具 |
性能测试数据¶
1. 测试数据规模¶
| 数据类型 | 数据量 | 备注 |
|---|---|---|
| 宠物主人信息 | 10万条 | 基础数据 |
| 宠物信息 | 20万条 | 关联数据 |
| 医生信息 | 1000条 | 基础数据 |
| 宠物类型 | 100条 | 基础数据 |
2. 测试数据分布¶
| 数据特征 | 分布 | 备注 |
|---|---|---|
| Last Name长度 | 1-50字符 | 均匀分布 |
| 地址长度 | 10-200字符 | 均匀分布 |
| 电话号码 | 10-15位数字 | 随机生成 |
| 城市名称 | 100个城市 | 随机选择 |
性能测试标准¶
1. 通过标准¶
| 指标 | 标准 | 备注 |
|---|---|---|
| 响应时间 | 95%的请求 ≤ 2秒 | 查询操作 |
| 吞吐量 | ≥ 50 TPS | 正常负载 |
| 错误率 | ≤ 0.1% | 所有操作 |
| 资源使用率 | CPU ≤ 80%, 内存 ≤ 85% | 正常负载 |
2. 失败标准¶
| 指标 | 标准 | 备注 |
|---|---|---|
| 响应时间 | 95%的请求 > 5秒 | 任何操作 |
| 吞吐量 | < 20 TPS | 正常负载 |
| 错误率 | > 1% | 任何操作 |
| 系统崩溃 | 任何情况下 | 不可接受 |
性能测试报告要求¶
1. 报告内容¶
- 测试环境描述
- 测试场景说明
- 测试结果分析
- 性能指标统计
- 问题分析和建议
- 优化建议
2. 报告格式¶
- 使用图表展示性能数据
- 提供详细的统计数据
- 包含问题截图和日志
- 提供优化建议和方案