软件测试入门——第三十四课(软件性能测试与JMeter实战入门指南)

📅 2026/7/10 9:37:29 👁️ 阅读次数 📝 编程学习
软件测试入门——第三十四课(软件性能测试与JMeter实战入门指南)

一、性能测试基础概念

1.1 什么是性能测试?

性能测试是通过模拟真实用户负载,验证系统在特定条件下的响应时间、吞吐量、资源利用率等指标是否满足预期要求的测试过程。它是保障软件系统稳定性和可扩展性的关键环节。

1.2 性能测试的核心目标

  • 评估系统容量:确定系统在正常和峰值负载下的处理能力
  • 发现性能瓶颈:识别CPU、内存、I/O、网络等资源瓶颈
  • 验证稳定性:确保系统在长时间运行下不会出现性能衰减
  • 优化系统配置:为系统调优提供数据支持

二、性能测试实施流程

2.1 需求分析与场景设计

关键步骤:

  1. 业务理解:深入分析被测系统的业务逻辑、用户行为模式
  2. 性能指标定义
    • 响应时间:单事务/页面加载时间
    • 吞吐量:单位时间内处理的请求数
    • 并发用户数:同时在线操作的用户数量
    • 资源利用率:CPU、内存、磁盘、网络使用率
  3. 测试场景设计
    • 基准测试:单用户验证功能正确性
    • 负载测试:模拟正常业务压力
    • 压力测试:逐步增加负载至系统极限
    • 稳定性测试:长时间运行验证系统稳定性

2.2 测试计划制定

计划要素:

  • 测试范围与目标
  • 测试环境配置(硬件、软件、网络)
  • 测试数据准备策略
  • 风险评估与应对方案
  • 团队分工与时间安排

2.3 测试执行与监控

执行阶段:

  1. 环境准备:搭建与生产环境相似的测试环境
  2. 脚本开发:使用JMeter等工具录制/编写测试脚本
  3. 数据准备:准备足够的测试数据,避免数据瓶颈
  4. 执行监控:实时监控系统资源使用情况
  5. 问题定位:分析性能瓶颈,提出优化建议

2.4 测试报告与优化

报告内容:

  • 测试概述与目标
  • 测试环境配置详情
  • 性能测试结果数据
  • 性能瓶颈分析
  • 优化建议与改进方案
  • 测试结论与风险评估

三、JMeter安装与配置详解

3.1 环境准备:JDK安装

3.1.1 JDK下载与安装
  1. 下载地址:访问Oracle官网或OpenJDK项目获取JDK安装包

    • Oracle JDK:https://www.oracle.com/java/technologies/downloads/
    • OpenJDK:https://adoptium.net/
  2. 安装步骤

    # 1. 运行安装程序,选择安装路径(建议:D:\Java\jdk1.8.0_xxx)# 2. 安装过程中会提示安装JRE,建议与JDK同一目录# 3. 完成安装后验证版本java-version
3.1.2 环境变量配置(Windows系统)

系统变量配置:

  1. 新建JAVA_HOME变量

    变量名:JAVA_HOME 变量值:D:\Java\jdk1.8.0_191 # 替换为实际安装路径
  2. 修改Path变量

    在Path变量值末尾追加: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
  3. 验证配置

    # 打开命令提示符,执行以下命令 java -version javac -version # 查看Java安装位置 where java where javac

常见问题解决:

  • Java命令不生效:检查Path变量中是否存在多个Java路径,保留正确的即可
  • 版本冲突:将系统自带的java.exe重命名或调整Path顺序

3.2 JMeter安装与启动

3.2.1 JMeter下载

官方下载地址:http://jmeter.apache.org/download_jmeter.cgi

版本选择建议

  • 生产环境:选择稳定版本(如5.4.3)
  • 学习测试:可选择最新版本体验新功能
3.2.2 安装步骤
  1. 解压安装包

    # 将下载的apache-jmeter-5.3.zip解压到指定目录# 建议路径:D:\Tools\apache-jmeter-5.3
  2. 启动JMeter

    # 方法1:双击bin目录下的jmeter.bat# 方法2:通过命令行启动cdD:\Tools\apache-jmeter-5.3\bin jmeter.bat
3.2.3 界面语言设置
  1. 修改配置文件

    • 打开bin/jmeter.properties文件
    • 找到language=配置项
    • 修改为:language=zh_CN
  2. 临时设置

    • 启动JMeter后,通过菜单修改:Options → Choose Language → Chinese
3.2.4 启动问题排查

问题:JMeter闪退
解决方案:

# 1. 以管理员身份打开命令提示符 # 2. 切换到JMeter的bin目录 cd /d D:\Tools\apache-jmeter-5.3\bin # 3. 执行启动命令,查看错误信息 jmeter.bat # 4. 常见原因及解决: # - Java环境未正确配置:重新配置JAVA_HOME和Path # - 端口冲突:修改jmeter.properties中的server_port # - 内存不足:调整bin/jmeter.bat中的HEAP设置

四、JMeter核心组件详解

4.1 测试计划结构

JMeter按照树形结构组织测试元素,执行顺序遵循以下规则:

  1. 配置元件:最先执行,用于初始化测试数据
  2. 前置处理器:在采样器之前执行
  3. 定时器:在采样器之前执行(除非作用域不同)
  4. 采样器:执行实际的请求
  5. 后置处理器:在采样器之后执行
  6. 断言:验证响应结果
  7. 监听器:收集和展示测试结果

4.2 线程组配置

线程组是性能测试的负载模型,主要参数:

# 基础配置示例 线程数:100 # 模拟的并发用户数 Ramp-Up时间:5秒 # 在5秒内启动所有线程 循环次数:永远 # 持续运行,或指定循环次数 调度器:启用 # 设置测试持续时间 持续时间:600秒 # 测试运行10分钟

参数详解:

  • 线程数:虚拟用户数量,代表同时执行测试的用户
  • Ramp-Up时间:控制线程启动速度,避免瞬间高并发
  • 循环次数:每个线程执行测试计划的次数
  • 调度器:控制测试的开始时间、结束时间和持续时间

4.3 常用断言类型

4.3.1 响应断言

用途:验证HTTP响应内容是否符合预期
配置要点

  • 测试字段:响应文本、响应代码、响应消息等
  • 匹配模式:包含、匹配、相等、子字符串等
  • 自定义失败消息:便于问题定位
4.3.2 断言持续时间

用途:性能测试中验证响应时间是否在可接受范围内
配置示例

最大持续时间:2000毫秒 # 响应时间超过2秒则断言失败
4.3.3 断言大小

用途:验证响应数据大小
应用场景

  • 确保API返回数据量在合理范围
  • 检测是否返回了完整的数据集
  • 预防数据传输过程中的截断问题

4.4 监听器使用指南

4.4.1 察看结果树

功能:查看每个请求的详细请求和响应信息
使用场景

  • 调试阶段:查看请求参数和响应内容
  • 问题排查:分析失败请求的具体原因
  • 数据验证:确认返回数据格式和内容

注意事项

  • 生产压测时禁用,避免内存溢出
  • 可配置仅保存错误日志,减少资源消耗
4.4.2 聚合报告

核心性能指标

指标说明理想范围
平均值平均响应时间根据业务要求设定
中位数50%请求的响应时间应接近平均值
90%百分位90%请求的响应时间< 平均值的2倍
95%百分位95%请求的响应时间< 平均值的3倍
最小值最快响应时间-
最大值最慢响应时间不应有异常峰值
异常%失败请求比例< 1%
吞吐量每秒处理请求数越高越好
接收/发送KB/sec网络吞吐量根据带宽评估
4.4.3 保存结果到文件

配置步骤

  1. 添加监听器 → 保存响应到文件
  2. 配置文件名和路径
  3. 选择保存内容:仅错误、所有样本等
  4. 配置文件格式:CSV、XML、JSON

乱码解决方案

# 方法1:修改JMeter配置文件# 在jmeter.properties中添加:sampleresult.default.encoding=UTF-8# 方法2:处理已生成的文件# 用记事本打开CSV文件 → 另存为 → 编码选择ANSI → 用Excel打开
4.4.4 JMeter基础介绍

jmeter本身不需要安装,只需要配置好JDK环境,然后在在jmeter文件中的bin文件中打开jmeter.bat文件即可
最新版本,建议配置的JDK最好用1.7及以上版本

一、基础构成
1、组成部分
1)负载发生器:产生负载,多进程或多线程模拟用户行为
2)用户运行器:脚本运行引擎,用户运行器附加在进程或线程上,根据脚本模拟指定的用户行为
3)资源生成器:生成测试过程中服务器、负载机的资源数据
4)报表生成器:根据测试中获得的数据生成报表,提供可视化的数据显示方式·

2、主要概念
2.1测试计划(test plan)
描述一个性能测试,包含本次测试所有相关功能
2.2.threads(users)线程

Setup thread group:
一种特殊类型的线程,可用于执行预测试操作。即执行测试前进行定期线程组的执行
Teardown thread group:
一种特殊类型的线程,可用于执行测试后动作。即执行测试结束后执行定期的线程组
以上两个线程组,举个例子:loadrunner的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块,与其对应
Thread group:
通常添加使用的线程,一般一个线程组可看做一个虚拟用户组,其中每个线程为一个虚拟用户

2.3测试片段(test fragment)
2.5版本之后新增的一个选项,是一种特殊的线程组,在测试树上与线程组一个层级,但是它不被执行,除非它是一个模块控制器或者被控制器所引用时才会被执行

2.4控制器
Jmeter有2种控制器:取样器(sampler)和逻辑控制器(Logic Controller)
作用:用这些原件驱动处理一个测试
1)取样器(Sampler)
是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler
如 HTTP Request Sampler 、 FTP Request Sampler 、TCP Request Sampler 、JDBC Request Sampler 等
每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。
Java Request Sampler 和 Beanshell Request Sampler 是两种特殊的可定制的 Sampler (暂不讨论)

2)逻辑控制器(Logic Controller)
包含两类原件:
一类是控制Test Plan中Sampler节点发送请求的逻辑顺序控制器,常用的有:If Controller、Swith Controller、Loop Controller、Random Controller等
另一类是用来组织和控制Sampler节点的,如Transaction Controller、Throughput Controller等

2.5监听器(Listener)
对测试结果进行处理和可视化展示的一系列组件,常用的有图形结果、查看结果树、聚合报告等
以上的五类原件就可以构成一个简单的性能测试脚本

下面再介绍几种jmeter提供的其他组件:
2.6配置原件(Config Element)
用于提供对静态数据配置的支持。CSV Date Set Config可以将本地数据文件形成数据池(Date Pool),而对应于HTTP Request Configuration
和TCP Request Sample等类型的Configuration元件则可以修改这些Sample的默认数据等

2.7定时器(Time)
用于操作之间设置等待时间,等待时间使性能测试中常用的控制客户端QPS的手段,jmeter定义了Constant Times、
Constant Throughput Times、Guass Ramdon Times等不同类型的Times

2.8断言(Assertions)
用于检查测试中得到的响应数据等是否符合预期,Assertions一般用来设置检查点,用以保证性能测试过程中的数据交互与预期一致

2.9前处理器(Pre Processors)
用于在实际请求发出之前对即将发出的请求进行特殊处理。
例如:Count处理器可以实现自增操作,自增后生成的的数据可以被将要发出的请求使用,而HTTP URL Re—Writing Modifier处理器则可以实现URL重写,
当URL中有sessionID一类的session信息时,可以通过该处理器填充发出请求实际的sessionID。

2.10后处理器(Post Processors)
用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似loadrunner中的关联)。
例如:Regular Expression Extractor用于提取响应数据中匹配某正则表达式的数据段,并将其填充在参数中,Xpath Extractor则可以用于提取响应数据中通过给定Xpath值获得的数据

五、性能测试最佳实践

5.1 测试环境规划

  • 环境隔离:测试环境与生产环境隔离,避免相互影响
  • 数据准备:使用真实数据或模拟数据,保证数据代表性
  • 监控部署:提前部署系统监控工具(如JConsole、VisualVM)

5.2 脚本开发规范

  • 参数化:使用CSV数据文件或随机函数生成测试数据
  • 关联处理:正确处理动态参数(如Session ID、Token)
  • 思考时间:模拟真实用户操作间隔
  • 断言策略:合理设置断言,避免误判

5.3 测试执行策略

  1. 预热阶段:先运行低负载测试,让系统达到稳定状态
  2. 梯度加压:逐步增加并发用户数,观察系统表现
  3. 峰值测试:在系统极限负载下运行,发现瓶颈
  4. 稳定性测试:长时间运行,检查内存泄漏等问题

5.4 结果分析与报告

分析维度

  • 响应时间趋势分析
  • 吞吐量与并发用户关系
  • 资源使用率分析
  • 错误率与系统稳定性

报告模板

1. 测试概述 2. 测试环境 3. 测试场景与目标 4. 测试结果数据 5. 性能瓶颈分析 6. 优化建议 7. 测试结论

六、常见问题与解决方案

6.1 JMeter内存优化

# 修改bin/jmeter.bat中的内存设置 set HEAP=-Xms1g -Xmx4g # 初始1G,最大4G set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50% set TENURING=-XX:MaxTenuringThreshold=2

6.2 分布式测试配置

  1. 控制机配置

    • 修改bin/jmeter.properties中的remote_hosts
    • 启动远程服务器:jmeter-server.bat
  2. 执行命令

    jmeter-n-ttestplan.jmx-R192.168.1.101,192.168.1.102-lresult.jtl

6.3 测试数据管理

  • 使用CSV Data Set Config管理测试数据
  • 定期清理测试数据,避免数据污染
  • 使用随机函数生成唯一性数据

通过系统学习上述内容,您将能够独立完成企业级性能测试任务,为软件系统的稳定性和可扩展性提供有力保障。