性能测试执行

category
测试
date
Apr 10, 2026
icon
password
slug
performanceTest
status
Published
summary
性能测试执行流程
tags
type
Post

一、性能指标

1、QPS

每秒查询率,表示一台服务器每秒能响应的查询次数

2、TPS

每秒处理的事务数目,事务通常是指一个完整的业务流程,可能包含多个请求

3、用户满意度指数

指数标准:最大值为1,越接近1,满意度越高
计算公式:(响应时间小于500ms+响应时间500~1500ms*0.5)/总次数

二、基础知识

术语介绍

模块(空行向上匹配)
字段/词
含义
线程组
线程数
虚拟用户数
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线程组会报错

数据计算

设定数据:
  1. 日活100W
  1. 高峰期4h
  1. 高峰期占总访问量60%
  1. 平均每天每人5次访问
计算结果或逻辑:
  1. 高峰期访问人数1000000*0.6/(4*3600)≈42人/s
  1. 高峰期QPS3000000/(4*3600)≈208请求/s
  1. 并发用户数计算1000000/4/3600*1*5≈345人 ;公式为:(用户总量/统计时间)*影响因子
  1. 并发用户数计算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 阶梯式压测

前提条件

  1. 下载JMeter-manager并放入lib/ext目录下:Install :: JMeter-Plugins.org
  1. 在Available Plugins选项中输入jpgc后空格,就可以搜索出jpgc插件,然后勾选jpgc - Standard Set后,点击Apply Changes and Restart JMeter
  1. 在Available Plugins中找到Custom Thread Groups,点击Apply Changes and Restart JMeter

实现流程

  1. 创建负载控制器线程组(sepping thread group)
  1. 添加配置元件:HTTP请求以及请求头数据
  1. 添加断言
  1. 添加监听器

注意点

  1. ramp-up时间:100以内,设置1-2秒即可,100-500左右,设置3-5秒,500-1000左右,设置5秒左右
  1. 断言尽量是判断接口状态

    3.3 参数化测试

    准备工作

    1. 文件格式要求:第一行为变量名称
    1. 使用UTF-8格式,并使用英文逗号分隔

    实现流程

    1. 添加线程(一般是setUp线程,优先级更高),注意配置循环次数!
    1. 添加配置元件-CSV Data Set Config
    1. 添加请求并引用变量,使用 ${变量名} 格式调用数据
    1. 给请求添加断言
    1. 添加监听器(察看结果树可检查请求调用)

    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
    运行测试
    1. 添加http请求、监视器等
    1. 运行时点击全部启动
    1. 验证:cmd日志查看;每台电脑设置的线程数为1,假设是两台电脑,就会有两个线程数;查看结果树master机的测试结果响应数据为空
    1. 如果想要master机的测试数据返回,需修改bin\jmeter.properties文件中的 mode=Standard 之前的 # 号去掉,重启jmeter即可
    命令行启动
    jmeter -n -t xxx.jmx -r -l results.jtl -e -o /path
     

    四、测试实例

    4.1 登录接口-参数化测试

    前置数据
    1、添加线程组,其中循环次数为数据总量
    notion image
    2、添加csv数据读取
    notion image
    3、添加HTTP请求
    notion image
    4、添加HTTP请求头管理器
    notion image
    5、添加监视器
    6、执行结果检查
    树状图:
    notion image

    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,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错
    解决方案:
    1. cmd中输入regedit命令打开注册表
    1. 在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters
    1. 添加一个新的DWORD,名字为MaxUserPort
    1. 然后双击MaxUserPort,输入数值数据为65534,基数选择十进制
    1. 重启机器
    还有一个可能的原因是:TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源
    解决方案:
    1. 同上步骤
    1. 添加一个新的DWORD,名字为TcpTimedWaitDe
    1. 然后双击TcpTimedWaitDe,输入数值数据为30,基数选择十进制
    1. 重启机器

    5.2 响应时间过长

    考虑以下几种情况:
    1. 注册表未修改,参考5.1
    1. 网络不佳
    1. 设备配置太低
    上一篇
    性能测试概述
    下一篇
    数据测试
    Loading...