性能测试执行
category
测试
date
Apr 10, 2026
icon
password
slug
performanceTest
status
Published
summary
性能测试执行流程
tags
type
Post
一、性能指标
二、基础知识
术语介绍
模块(空行向上匹配) | 字段/词 | 含义 |
线程组 | 线程数 | 虚拟用户数 |
ㅤ | Ramp-Up时间 | 所有虚拟用户全部启动的时间 |
ㅤ | 循环次数 | 每个线程发送请求的个数 |
HTTP请求 | 参数数据 | 这里的参数表示的是请求负载 |
配置元件-HTTP信息头管理器 | 信息头 | 添加请求token |
断言 | 响应断言 | 判断请求的结果是否正常 |
ㅤ | 断言结果 | 根据响应断言统计请求结果 |
定时器-CTT | 常数吞吐量计数器 | QPS测试 |
监视器-聚合报告 | Throughout字段 | TPS数据 |
阶梯式压测 | This group will start | 总线程/用户数 |
ㅤ | First wait for | 启动前等待时间 |
ㅤ | then start | 从。号线程/用户开始 |
ㅤ | Next add | 每次阶梯添加的线程/用户数 |
ㅤ | threads every | 每个阶梯运行的时间 |
ㅤ | using ramp-up | 阶梯切换时间 |
ㅤ | Then hold load for | 最大并发时的持续时间 |
ㅤ | Finally stop | 压测完成用户退出数,同样是阶梯退出 |
ㅤ | threads every | 每次退出间隔时间 |
ㅤ | ㅤ | ㅤ |
线程组
执行流程图
特性 | setUp线程组 | 普通线程组 | tearDown线程组 |
执行时机 | 最先执行 | setUp之后执行 | 所有普通线程组之后执行 |
典型用途 | 测试前准备 | 主测试业务 | 测试后清理 |
执行次数 | 通常只执行一次 | 按配置循环执行 | 通常只执行一次 |
依赖关系 | 不依赖其他组 | 依赖setUp的初始化 | 依赖主测试完成 |
是否必须 | 可选 | 必须(至少一个) | 可选 |
并发用户 | 通常单用户 | 模拟真实并发 | 通常单用户 |
持续时间 | 较短 | 主要测试时长 | 较短 |
注意:至少要有一个普通线程组,如果单独一个setUp或者tearDown线程组会报错
数据计算
设定数据:
- 日活100W
- 高峰期4h
- 高峰期占总访问量60%
- 平均每天每人5次访问
计算结果或逻辑:
- 高峰期访问人数
1000000*0.6/(4*3600)≈42人/s
- 高峰期QPS
3000000/(4*3600)≈208请求/s
- 并发用户数计算
1000000/4/3600*1*5≈345人;公式为:(用户总量/统计时间)*影响因子。
- 并发用户数计算
1000000*5*0.6/4/3600*1.5=312人;公式为:访问量*高峰占比/时间*经验因子。这里考虑的经验因子是最多1.5s加载完成
注意:这里的并发用户数计算其实并没有固定的规则,主要是参考线上和往期测试数据;其中的影响因子和经验因子视情况而定
其他计算公式
经典公式
- n是login session的数量(每天的用户数)
- L是login session的平均长度(每天平均使用时间)
- T是值考察的时间长度(理论上每天的使用时长,比如工作日8小时)
平均并发用户数:C=n*L/T
并发用户数峰值:C`=C+3*根号C
通用公式
并发用户数峰值=(用户总量*高峰比例/统计时间)*影响因子(一般为3)
PV计算公式
并发用户数峰值=访问量*高峰占比/时间*经验因子
命令行执行
示例:
jmeter -n -t test.jmx -l result.jtl -e -o /usr/local/apache-jmeter-3.1/result解释:非GUI模式调用test.jmx文件生成result.jtl,生成的jtl文件转为HTML报告到文件夹中
基本执行参数 | ㅤ | ㅤ |
-n | 非GUI模式执行 | jmeter -n |
-t | 指定JMX测试文件 | -t test.jmx |
-l | 指定结果文件(JTL/CSV) | -l result.jtl |
-j | 指定JMeter日志文件 | -j jmeter.log |
-e | 测试结束后生成报告 | -e |
-o | 指定HTML报告输出目录 | -o ./report |
-g | 仅从已有结果生成报告 | -g result.jtl -o report |
分布式运行参数 | ㅤ | ㅤ |
-R | 远程启动服务器列表 | -R 192.168.1.101,192.168.1.102 |
-r | 使用jmeter.properties中的远程服务器 | -r |
-X | 测试结束后停止远程服务器 | -X |
ㅤ | ㅤ | ㅤ |
三、测试场景
3.1 常规简单检查
3.2 阶梯式压测
前提条件
- 下载JMeter-manager并放入lib/ext目录下:Install :: JMeter-Plugins.org
- 在Available Plugins选项中输入jpgc后空格,就可以搜索出jpgc插件,然后勾选jpgc - Standard Set后,点击Apply Changes and Restart JMeter
- 在Available Plugins中找到Custom Thread Groups,点击Apply Changes and Restart JMeter
实现流程
- 创建负载控制器线程组(sepping thread group)
- 添加配置元件:HTTP请求以及请求头数据
- 添加断言
- 添加监听器
注意点
- ramp-up时间:100以内,设置1-2秒即可,100-500左右,设置3-5秒,500-1000左右,设置5秒左右
- 断言尽量是判断接口状态
3.3 参数化测试
准备工作
- 文件格式要求:第一行为变量名称
- 使用UTF-8格式,并使用英文逗号分隔
实现流程
- 添加线程(一般是setUp线程,优先级更高),注意配置循环次数!
- 添加配置元件-CSV Data Set Config
- 添加请求并引用变量,使用
${变量名}格式调用数据
- 给请求添加断言
- 添加监听器(察看结果树可检查请求调用)
3.4 分布式压测
前景内容
需求背景
- jmeter最大支持1000左右的并发用户数
- 单机很容易出现java内存溢出的错误
测试目的
- 确保压力机不会出现性能瓶颈
- 超1000并发的压测实现
环境准备
- jmeter安装
- java jdk安装
- 主从配置,一台控制机Master,n台执行机Slave
Slave配置
- bin目录下的jmeter.properties文件,修改remote_hosts字段为控制机IP+端口。例:remote_hosts=192.168.1.1:1099
- 启动jmeter-server.bat,启动能看到master的ip则说明配置成功
Master配置
- bin目录下的jmeter.properties文件,修改remote_hosts字段为本机ip+端口、执行机IP+端口。
- 注意:所有代理机都需要加入进来,并用逗号分隔
- 启动jmeter-server.bat
运行测试
- 添加http请求、监视器等
- 运行时点击全部启动
- 验证:cmd日志查看;每台电脑设置的线程数为1,假设是两台电脑,就会有两个线程数;查看结果树master机的测试结果响应数据为空
- 如果想要master机的测试数据返回,需修改bin\jmeter.properties文件中的 mode=Standard 之前的 # 号去掉,重启jmeter即可
命令行启动
jmeter -n -t xxx.jmx -r -l results.jtl -e -o /path四、测试实例
4.1 登录接口-参数化测试
前置数据
1、添加线程组,其中循环次数为数据总量

2、添加csv数据读取

3、添加HTTP请求

4、添加HTTP请求头管理器

5、添加监视器
6、执行结果检查
树状图:

4.2QPS负载+多线程
题目/前置数据:42个用户访问网站,负载达到208QPS时的平均响应时间
1、添加线程组
2、添加HTTP请求
3、给HTTP请求添加定时器-CTT。注意:时间单位是分钟
4、添加监视器
五、异常情况处理
5.1 java.net.BindException: Address already in use: connect
原因:windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错
解决方案:
- cmd中输入regedit命令打开注册表
- 在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters
- 添加一个新的DWORD,名字为MaxUserPort
- 然后双击MaxUserPort,输入数值数据为65534,基数选择十进制
- 重启机器
还有一个可能的原因是:TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源
解决方案:
- 同上步骤
- 添加一个新的DWORD,名字为TcpTimedWaitDe
- 然后双击TcpTimedWaitDe,输入数值数据为30,基数选择十进制
- 重启机器
5.2 响应时间过长
考虑以下几种情况:
- 注册表未修改,参考5.1
- 网络不佳
- 设备配置太低
上一篇
性能测试概述
下一篇
数据测试
Loading...