Jmeter学习笔记

一 、前置

1. Jmeter安装

地址: Jmeter 下载
地址: jdk下载

2. 插件包下载安装

地址:Jmeter 插件包
.jar插件包复制 —> Jmeter路径 —> lib —> ext —> 重启Jmeter,即可在选项(Option) 下看到 Plugins Manager,点击后即可进入插件下载页面
Jmeter插件下载

插件举例:
Transaction per Second(TPS):每秒事务数
Response Times Over Time(TRT):事务响应时间
Active Threads Over Time:统计每秒活动的线程总数
[※]jp@gc - Stepping Thread Group(阶梯压测):

  • 测试计划 —> 添加 —> 线程 —> jp@gc - Stepping Thread Group
  • 该场景主要应用在负载测试里面,通过设定一定的并发线程数,给定加压规则,遵循“缓起步,快结束”的原则,不断地增加并发用户来找到系统的性能瓶颈,进而有针对性的进行各方面的系统优化
  • 转载网址link
    面板介绍

3. 性能指标及常见的性能测试方法

指标:

响应时间(Response Time)秒单位

  • 5s以内,极端的举例2~3s最优
  • 大于7秒可能用户体验不太好
  • (具体看项目的要求)

吞吐量(Throughput)

  • 评估服务端的处理能力,举例订单接口在特定的情况下能处理多少的订单量
  • tps,通过事务来评估;qps每秒查询数每秒的事务处理量
  • 网络的评估方面,每秒钟上行下行的字节数

资源使用率(Resource utilization)

  • 占用多少的内存。CPU占用率,I/O磁盘占用了多少,举例具体看代码评估资源使用率,不能只看CPU占比,可能还有代码的角度是否有缺陷

点击数(Hits per second)

  • 评估服务端发起的请求数,前端请求的接口的数量

并发用户数(Concurrent users)

  • 模拟并发用户数,举例说明是:同时有多少用户来访问,(集合点)极端的是同一时刻发起的请求,更多的是说用多少的用户量发起请求

测试方法:

基准测试
  • 模拟单用户,验证单用户下评估系统是不是存在性能问题
  • 调脚本
负载测试
  • 压大的用户量,看系统的性能运行情况,例:压10分钟或20分钟
稳定性测试
  • 长时间的压测,例8个小时以上

4. 环境变量配置参考

path:
C:\Program Files\Java\jdk-15\bin;C:\Users\user\Test\data\apache-jmeter-5.4.1\bin

CLASSPATH:
C:\Program Files\Java\jdk-15\lib*.jar;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar

JMETER_HOME:
C:\Users\tingfliu\Test\data\apache-jmeter-5.4.1

二 、Jmeter使用

1. 主要组件

  • 测试计划
  • 线程组
  • 取样器
  • 监听器
  • 断言

聚合报告

  • 90%百分位
  • 吞吐量

2. 录制操作

1、使用Badboy录制操作导出给Jmeter使用
2、使用Jmeter自带录制工具:
Jmeter录制

3. Jmeter接口返回内容乱码

1、修改 JMeter 配置文件

  • JMeter 的默认编码是 ISO-8859-1,可以通过修改 jmeter.properties 配置文件来设置默认编码为 UTF-8。
    • 打开 JMeter 安装目录下的 bin 文件夹
    • jmeter.properties 文件
    • 取消注释:去掉前面的 #,取值:UTF-8:
    • sampleresult.default.encoding=UTF-8
  • 保存文件并重新启动 JMeter

2、HTTP请求

  • 内容编码 处取值:UTF-8

4. 命令行执行脚本

原因

  • 直接启动Jmeter运行线程较多的测试脚本,会造成内存和CPU的大量消耗,导致客户机卡死,所以正确的打开方式是在GUI模式下调整测试脚本,再用命令行模式执行。

命令行语句

  • 转载网址link1
  • 转载网址link2
  • 转载网址link3
  • 执行路径:
    • 执行命令前要检查当前目录是否是%Jmeter_Home%\bin 目录
    • 如果 Jmeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径
    • 命令中不指定测试计划与测试结果的路径时,默认都是在该目录下
  • 命令参数及释义
命令参数命令释义
-n设置命令行模式运行Jmeter
-t指定要执行的jmx文件
参数:Jmx脚本路径,若非当前目录使用全部路径或相对路径
-l指定测试结果的日志文件(类似于查看结果树,jtl或csv文件)路径
参数:结果文件路径。路径不存在时会自动创建
-j指定Jmeter日志文件(INFO、ERROR、DEBUG等)
参数:日志路径。路径不存在,不会自动创建,同时将日志输出至命令行控制台
-g指定结果文件的路径,仅用于生成测试报告
参数:jtl或csv文件报告
-e在测试结束后生成HTML测试报告
-o指定用于生成HTML报告的目标目录文件夹必须为空或不存在
参数:报告文件夹路径
-r指定(远程)运行Jmeter客户端和服务器模式
服务器列表由JMETER_HOME\bin\jmeter.properties中remote_hosts指定
-R指定远程(分布式)服务器列表
参数:指定服务器列表,配置形式同remote_hosts
-s运行Jmeter作为服务器(用于分布式测试)
-f强制将Jmeter进程结束,或者在运行非GUI测试时,立即结束测试并生成结果文件
-c指定远程服务器的 IP 地址或主机名
-i指定本地 IP 地址,用于远程服务器通信
-H指定代理服务器的主机名或代理服务器IP
参数:服务器的主机名或代理服务器IP
-P指定代理服务器的端口号
参数:代理服务器的端口号
  • 可开始菜单搜索打开命令行工具:PowerShell
# 使用命令行的'cd命令进入到本地Jmeter工具bin目录
cd Jmeter的bin路径
# 切换到b盘
b:

# 举例1
.\jmeter -n -t jmx/file.jmx -l jtl/file_线程数.jtl -e -o report_file_线程数
# 举例2
# 文件路径地址尽量不要有空格和中文
# 每次运行时路径下都不要有jtl文件和report文件夹
.\jmeter -n -t D:\PerformanceTest\promoteTest.jmx -l D:\PerformanceTest\LOG\csvlog.jtl -e -o D:\PerformanceTest\Report

# -j
-j report\01-log.log

# -r
.\jmeter-server -Djava.rmi.server.hostname=192.168.1.100

# -s
.\jmeter-server

# -c
.\jmeter -c 192.168.1.100

# -i
.\jmeter -i 192.168.1.101

# -f
.\jmeter-server -Djava.rmi.server.hostname=192.168.1.100

# -H
.\jmeter -H proxy.example.com

# -P
.\jmeter -P 8080
  • 注意事项
    • 自定义配置
      Jmeter3.0以后在bin目录新增了reportgenerator.properties文件保存了所有关于图形化HTML报告生成模块的默认配置,要变更配置,建议不要直接编辑该文件,而是推荐在user.properties中去配置和覆盖。
    • 默认采样点粒度是60000ms(即1分钟),通常在稳定性以外的测试过程中我们需要细化粒度,如1000ms(即1秒),我们在user.properties文件中添加如下配置:
    jmeter.reportgenerator.overall_granularity=1000
    

5. JSON提取器

  • 线程组 —> 添加 —> 后置处理器 —> JSON提取器

面板字段含义

面板字段含义
Main sampleand sub-samples应用于主sample及子sample
Main sample only默认的是这个,应用于主sample
Sub-samples only应用于子sample
Jmeter Variable Name to use应用于变量命名的内容
Names of created variable名称
参数:code
JSON Path ExpressionJSON表达式
参数:$.code
Match Numbers0随机;n取第几个匹配值;-1匹配所有,后续引用用 变量名_N 取第N个值
参数:1
Compute concatenation var (suffix_ALL)勾选框,默认不勾选
Default Values如果参数没获取到可默认参数为(因人而异):null
$.你要提取的参数

1、响应类似{"属性":[{"sx":1},{},{}]},整个响应是个对象。取sx的值:$.属性[0].sx

2、修改json extractor 获取数组的所有值   $[*].属性。match no=3取第33、match no=5,数组越界后,取default values

4、修改json extractor  设置match no =-1 匹配对应字段所有值;并修改接收参数的http请求的参数为 ${varname_N}.N=1-4

我想提取code参数值:
JSON Path Extractor:$.code

字段详细举例:
提取username参数值:
JSON Path Extractor:$.list[0].username

如果提取的参数不存在父级?
$.你要提取的参数名

提取的参数存在父级
$.你要提取的参数名的父亲.你要提取的参数名

如果提取参数的父级存在父级
$.你要提取的参数名的父亲的父亲(爷爷).你要提取的参数名的父亲.你要提取的参数名
$.data.code


:参数如果是[数组]
$.你要提取的参数参数[N]
以下标的形式取值,0代表取的数组中第一个值,1代表取的是数组中第二个值,N代表取的数组中第N+1个值

5、提取多个值得json内容和提取单个值得格式保持一致,多个之间分别用分号来隔开 $.code;$.code2;$.data.code

验证Json提取数据

  • 针对想获取的 HTTP请求 使用 察看结果树JSON Path Tester 的输入方式,在该请求的 Json Path Expression 处输入参数,Test 是否可以获取取值
  • 注:一次只能输入一个参数 Test 是否可以获取值
  • 配合使用,可在HTTP请求右键添加 调试后置处理程序 在结束树查看提取数据情况

6. 循环控制器

  • 配合使用:计数器
    • Starting value
    • 递增
    • Maximum value,可从 调试后置处理程序 取值:${参数_matchNr},取到参数次数
    • 引用名称,后续HTTP请求可用计数器的计数参数,可使用:num
      • 后续HTTP请求使用参考:KaTeX parse error: Expected group after '_' at position 2: {_̲_V(参数_{num},)}

7. 仅一次控制器

  • 线程组 —> 添加 —> 逻辑控制器 —> 仅一次控制器
  • 并发数=跑的次数

8. IF控制器

  • 线程组 —> 添加 —> 逻辑控制器 —> 如果(if)控制器

面板字段含义

面板字段含义
Expression (must evaluate to true or false)表达式(值必须是true或false),在右边文本框中输入的条件值必须是true或false(默认false)
Interpret Condition as Variable Expression?默认勾选,将条件解释变为变量表达式,需要使用{_̲_jexl3}或{__groovy}表达式
Evaluate for all children?条件作用于每个子项
建议选中[Interpret Condition as Variable Expression?]
注意如果取消选中Interpret Condition as Variable Expression?,这可能会导致性能损失很大,并使测试的扩展性降低,所以不推荐不勾选
 ${_̲_jexl3("${code}"="0")}
 ${__groovy("${code}"=="0")}

9. 响应断言

  • 点击 添加 —> 断言 —>响应断言
  • 将想要放response里的内容放在 测试模式 ,需是text文本格式返回值
  • 自定义失败信息 存放

10. Jmeter连接数据库

转载网址link
截取的大致信息如下:

下载对应数据库插件驱动

导入插件

  • 方法1:把jar文件放置到Jmeter路径的lib文件夹后重启Jmeter
  • 方法2:Jmeter导入插件

添加连接 JDBC Connection Configuration

  • 线程组 —> 添加 —> 配置元件 —>JDBC Connection ConfigurationJDBC Connection Configuration添加
  • 示意图:
    JDBC Connection Configuration内容
  • 面板字段含义
面板字段含义
Variable Name for created pool定义池变量名称,自定义参数,在JDBC Request中会用到
Max Number of Connections1、最大连接数
2、做性能测试时,建议填 0;如果填了10,则最大连接10个线程
Time Between Eviction Runs(ms)1、线程可空闲时间,单位毫秒
2、如果当前连接池中某个连接在空闲了 time Between Eviction
Runs Millis时间后任然没有使用,则被物理性的关闭掉
Auto Commit自动提交sql语句,如:修改数据库时,自动 commit
Transaction isolation事务隔离级别
Preinit Pool1、立即初始化连接池
2、如果为 False,则第一个 JDBC 请求的响应时间会较长,因为包含了连接池建立的时间
  • 面板数据库连接配置
面板字段含义
Database URL数据库连接 URL
JDBC Driver class数据库驱动
Username数据库登录用户名
Password数据库登录密码
Connection Properties建立连接时要设置的连接属性

添加 JDBC Request

  • 路径:线程组 > 添加 > 取样器 > JDBC Request
  • 示意图:JDBC Request
  • 面板字段含义
面板字段含义
Variable Name Bound to Poo数据库连接池配置的名称
Query Typesql 语句的类型
SQL Querysql 语句
语句结尾不需要添加
变量用 ? 占位
Parameter values需要传递的变量值,多个变量用 , 分隔
Parameter types变量类型
Variable Names1、保存sql语句返回的数据和返回数据的总行数
2、用 , 分隔
3、跳过列用空
4、Result Variable Name
Query timeout(s)1、 超时时间
2、默认0,代表无限时间
Limit ResultSet和 limit 类似作用,限制 sql 语句返回结果集的行数
Handle ResultSet1、如何定义 callable statements 返回的结果集
2、默认是存储为字符串

三 、另外的一些检测方法

Google performance检测

  • PC 网页端
  • 记录加载速度
    谷歌performance检测
  • 录制结果
    summary
  • 重点字段:Scripting (调接口的速度参考)
  • 运行结果s = Total - Idle

Lighthouse

Azure Monitor

批量数据导入

  • 使用csv文件
  • 如果遇到表列名是uniqueidentifier类型,无法导csv文件数据进表可采取方法
    • 生成【原表】的创表语句,修改:uniqueidentifier类型 —> 其他字符类型,例如:nvarchar(50)
    • 注:创建【中间表】可能需要删除原sql中key设置
    • 把数据csv文件导入【中间表】
    • 从【中间表】把数据导入【原表】
      • 使用insert into 【原表】([原表字段]) select [中间表字段] from 【中间表】;
      • select uniqueidentifier类型的字段需要进行转换:
insert into 原表 ([原表字段]) select [中间表字段] from 中间表;

TRY_CONVERT(UNIQUEIDENTIFIER, [中间表字段]) [中间表字段]
-- 或者可能需要 
TRY_CONVERT(UNIQUEIDENTIFIER, ISNULL([中间表字段],'00000000-0000-0000-0000-000000000000')) [中间表字段]
-- 或者可能需要
ISNULL([中间表字段],0) [中间表字段]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值