JMeter----笔记

文章目录

JMeter安装和基本使用

JMeter环境安装

1.安装JDK

2.安装JMeter

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

安装:把下载的安装包,解压到某一目录即可

配置环境变量:JMETER_HOME=> F:\Jmeter\apache-jmeter-5.1.1在环境变量Path中添加%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar

进入JMeter安装目录下的bin目录

启动:

1、双击 jmeter.bat

2、双击 ApacheJMeter.jar

3、命令行输入: java -jar ApacheJMeter.jar

JDK常用文件目录介绍

Bin目录:存放可执行文件和配置文件

docs目录:是JMeter的api文档,用于开发扩展组件

apache-jmeter-5.0/docs/api/index.html

printable_docs目录:用户帮助手册

apache-jmeter-5.0/printable_docs/index.html

lib目录:存放JMeter依赖的jar包和用户扩展所依赖的jar包

JMeter汉化

临时汉化:启动JMeter->选择菜单'Options'->Choose Language->Chinese(Simplified)

永久性汉化:修改配置文件

1.找到jMeter安装目录下的bin目录

2.打开jmeter.properties文件,把第37行修改为"language=zh_CN",并取消该行注释

3.重启JMeter即可

JMeter元件

JMeter元件和组件介绍

元件的基本介绍

元件:多个类似功能组件的容器(类似于类)

元件有:

取样器:发送请求

逻辑控制器:控制语句的执行顺序

前置处理器:对请求参数进行预处理

后置处理器:对响应结果进行提取

断言:检查接口的返回结果是否与预期结果一致

定时器:设置等待

测试片段:封装一段代码,供其他脚本调用

配置元件:测试数据的初始化配置

监听器:查看jmeter脚本运行结果
组件的基本介绍

组件:实现独立的某个功能(类似于方法)

就是鼠标悬停到元件出来的选项
接口自动化脚本的实现过程

初始化测试数据 ---配置元件

对请求参数进行赋值 ---前置处理器

调用GET/POST方法发送请求 ----取样器

提取响应中特定字段的值 -----后置处理器

对提取出来的值与预期结果进行对比 ----断言

在控制台查看脚本运行的结果 ----监听器

元件的作用域和执行顺序

元件的作用域

元件的作用域:是靠测试计划的树形结构中元件的父子关系来确定的。(所有的组件都是以取样器为核心来运行的,组件添加位置的不同,生效的取样器也不同)
作用域的原则

取样器:核心,不和其他元件相互作用,没有作用域

逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用

其他元件:

如果是某个取样器的子节点,则该元件只对其父节点起作用;

如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)
元件的执行顺序

同一个作用域下不同类型元件:

1.配置元件(configelements)

2.前置处理程序(Per-processors)

3.定时器(timers)

4.取样器(Sampler)

5.后置处理程序(Post-processors)

6.断言(Assertions)

7.监听器(Listeners)

同一个作用域下多个相同类型元件:

按照在测试计划中从上到下的顺序依次执行

JMeter基本组成部分

线程组

作用:线程组就是控制JMeter用于执行测试的一组用户
特点:

模拟多人操作

线程组可以添加多个,多个线程组可以并行或串行(当有多个线程组的时候默认并行执行,只有在测试计划中勾选独立运行每个线程组,才会串行执行)

取样器(请求)和逻辑控制器必须依赖线程组才能使用

线程组下可以添加其他元件下组件
线程组分类:

普通线程组:普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户

setup线程组:一种特殊类型的线程组,可用于执行预测试操作

teardown线程组:一种特殊类型的线程组,可用于执行测试后工作

线程组-参数详解

线程数的虚拟用户是并行执行

案例分析

取样器

HTTP请求

作用:向服务器发送Http及https请求

参数:

查看结果树

作用 :查看HTTP请求的请求和响应结果
察看结果树组成

取样结果:查看响应信息头信息、响应状态码

请求:查看请求相关信息(url、方法、参数)

响应:查看响应信息
异常

异常1:查看结果树种的HTTP请求中,有多个子HTTP请求

原因:

第一个HTTP请求中,URL错误,导致服务器产生了重定向,提供了新的URL路径

jmeter会自动的使用重定向路径发送第二个HTTP请求

点击最外层的HTTP请求和子请求中最后发送的HTTP请求一致

异常2:响应数据乱码

解决方法:

1.找到jMeter安装目录下的bin目录

2.打开jmeter.properties文件,修改配置sampleresult.default.encoding=UTF-8

3.重启JMeter即可

JMeter进行HTTP接口测试的技术要点

JMeter参数化

本质:使用参数的方式来替代脚本中的固定的测试数据

实现方式:定义变量、文件定义的方式、数据库的方式、函数的方式

参数化测试:把测试数据组织起来,用不同的测试爱护据调用相同的测试方法

Jmeter中常见的参数化方式:用户定义的变量、用户参数、CSV Data Set Config、函数
用户定义的变量

作用:定义全局变量

位置:测试计划-线程组-配置元件-用户定义的变量

参数定义及使用:


用户参数

作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值

位置:测试计划-线程组-前置处理器-用户参数

参数:


CSV数据文件设置

作用:让不同用户在多次循环时,可以取到不同的值

位置:测试计划-线程组-配置元件-csv数据文件设置

参数:

函数(_counter)

作用:计数函数,一般做执行次数统计使用

位置:在菜单中选择-选项-函数助手对话框

设置:TRUE,每个用户有自己的计数器;FALSE,使用全局计数器

Name of variable in which to store the result (optional) :用于存储变量名(可填)

JMeter断言

断言:让程序自动判断预期结果和实际结果是否一致

常用断言:
响应断言 :对任意格式的响应数据进行断言

位置:测试计划-线程组-HTTP请求-断言-响应断言

参数:

测试字段:要检查的项(实际结果)

响应文本:来自服务器的响应文本,即主体响应代码:响应的状态码,例如:200

响应信息:响应的信息,例如:OK

ResponseHeaders:响应头部

RequestHeaders:请求头部

RequestData:请求数据

URL样本:请求URL

Document(text):响应的整个文档

忽略状态:忽略返回的响应状态码

模式匹配规则:比较方式(注意:Equals和Substring模式是普通字符串,而包括和匹配模式是正则表达式)

包括:文本包含指定的正则表达式

匹配:整个文本匹配指定的正则表达式

Equals:整个返回结果的文本等于指定的字符串(区分大小写)

substring:返回结果的文本包含指定字符串(区分大小写)

否:取反

或者:如果存在多个测试模式,勾选代表逻辑或(只要有一个模式匹配,则断言就是OK),不勾选代表逻辑与(所有都必须匹配,断言才是OK)

测试模式:预期结果

即填写你指定的结果(可填写多个),按钮【添加】、【删除】是进行指定内容的管理

JSON断言 :对json格式的响应数据进行断言

位置:测试计划-线程组-HTTP请求-断言-JSON断言

参数:

持续时间断言(Duration Assertion) :对响应时间进行断言

作用:检查Http请求的响应时间是否超出要求范围

位置:测试计划-->线程组-->HTTP请求-->(右键添加)断言-->断言持续时间

参数:持续时间(毫秒):HTTP请求允许的最大响应时间(单位:毫秒)。超过则认为失败

JMeter关联

关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。

JMeter中常用的关联方法:

-正则表达式提取器:提取任意格式的响应数据

-XPath提取器:提取HTML格式的响应数据

-JSON提取器:提取JSON格式的响应数据
正则表达式提取器

作用:针对任意格式的响应数据进行提取

位置:测试计划-->线程组-->HTTP请求-->(右键添加)后置处理器-->正则表达式提取器

参数:

当匹配数字-1时,获取全部取值,可通过变量_n引用该匹配项的第n个数据

xpath提取器

作用:针对HTML格式的响应结果数据进行提取

位置:添加方式:测试计划-->线程组-->HTTP请求-->(右键添加)后置处理器-->XPath提取器

xpath表达式

JSON提取器

作用:针对JSON格式的响应结果数据进行提取

位置:添加方式:测试计划-->线程组-->HTTP请求-->(右键添加)后置处理器-->JSON提取器

参数:json路径:$...

JMeter属性关联

JMeter属性的配置函数:

__setProperty函数:将值保存成JMeter属性

__property函数:在其他线程组中使用property函数读取属性

JMeter属性的函数执行:

__setProperty函数执行(保存JMeter属性):

------需要通过BeanShell取样器来执行

__property函数(读取属性)

------在其他线程组中使用property函数

Debug Sampler(调试取样器)

允许用户查看在测试执行期间变量和属性的状态。

参数说明

  • 名称:控制器的名称,可自定义,用于标识调试器。
  • 注释:可选,用于记录添加Debug Sampler的原因或注意事项。
  • JMeter Properties:设置为True时,显示JMeter的系统属性,如版本、编码格式等。
  • JMeter Variables:设置为True时,显示用户定义的变量,如线程组或测试计划中定义的变量。
  • System Properties:设置为True时,显示系统的属性信息。

正则表达式

正则表达式:就是一个公式或者一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容

JMeter录制脚本

JMeter录制脚本:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本。

原理:录制时,JMeter作为代理服务器来拦截和转发请求与响应数据
JMeter录制脚本的操作步骤

1.添加HTTP代理服务器,并进行配置

加HTTP代理服务器:测试计划(右键)->非测试元件->HTTP代理服务器

配置代理服务器的参数

2.开启windows操作系统的浏览器代理

JMeter直连数据库

直连数据库的使用场景

直连数据库的关键配置:

添加MySQL驱动jar包:

-方式一:在测试计划面板点击浏览按钮,将你的JDBC驱动添加进来

-方式二:将MySQL驱动jar包放到lib/ext目录下,重启JMeter

配置数据库连接信息:

-添加方式:测试计划-线程组-配置元件-JDBC Connection Configuration

参数介绍:

  • Variable Name: mysql数据库连接池名称(JDBC请求时要引用)

  • Database URL: jdbc:mysql://localhost:3306/tpshop2.0( 组成:协议 + 数据库IP + 数据库端口 + 连接的数据库名称)

  • JDBC DRIVER class: com.mysql.jdbc.Driver(MySQL驱动包位置固定格式 ------ 下拉框选择)

  • Username: root(连接数据库用户名,如实填写)

  • Password:(MySQL数据库密码,如实填写,如果密码为空不写) 添加JDBC请求:

添加方式:测试计划 --> 线程组--> 取样器 --> JDBC Request

参数介绍:

  • Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致

  • Query Type:

  • 查询操作:选择"Select Statement"

  • 增加、删除、修改操作:选择"Update Statement"

  • Query:填写的SQL语句,未尾不要加";"

  • Variable names:保存SQL语句返回结果的变量名。(注意:SQL语句返回结果为列表,不能直接使用,要带下标)

JMeter逻辑控制器

逻辑控制器: 可以按照设定的逻辑控制取样器的执行顺序
如果(if)控制器

作用:If控制器用来控制它下面的测试元素是否运行

位置:测试计划 --> 线程组--> (右键添加) 逻辑控制器 --> 如果(If)控制器

参数介绍:(JS形式执行比函数形式执行慢)

函数形式:选项-函数助手-选择函数(__jex13),然后JEXLexpression to evaluate项值放入JS串,生成的函数字符串放入上图位置即可
循环控制器

作用:通过设置循环次数,来实现循环发送请求

位置:测试计划 --> 线程组--> (右键添加) 逻辑控制器 --> 循环控制器

参数介绍:

循环次数:需要循环几次填几次即可
ForEach控制器

作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值。该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。

位置:测试计划 --> 线程组--> (右键添加) 逻辑控制器 --> ForEach控制器

参数介绍:

  • 输入变量前缀:要读取的输入变量的固定前缀(例:如果使用的是用户自定义变量,要想遍历的遍历变量名前缀需要一致,此处填的就是对应的变量名前缀)
  • 开始循环字段:要读取的输入变量后缀数字的最小值-1
  • 结束循环字段:要读取的输入变量后缀数字的最大值(如果不写默认读取到最后一个值,但是如果变量后缀数字不连续,读到首次不连续出结束)
  • 输出变量名称:读取输入变量的值后保存的新变量名,用于后续HTTP请求来引用

JMeter进行性能测试的技术要点

定时器

同步定时器

使用场景:测试抢购、秒杀、抢红包等高并发的场景时使用

同步定时器:阻塞线程(累积一定的请求),当在规定的时间内达到一定的线程数量,这些线程会

在同一个时间点一起释放,瞬间产生很大的压力。

位置:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 定时器 --> Synchronizing Timer

参数介绍:

  • Number of Simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量。若设置为0,等于设置为线程组中的线程数量
  • Timeout in milliseconds:超时时间(单位毫秒),即超时多少毫秒后同时释放指定的线程数;如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间后还没达到设置的线程数,Timer将不再等待,释放已到达的线程。默认为0
    常数吞吐量定时器Constant Throughput Timer
    使用场景:需要按指定的吞吐量发送请求时,可以使用常数吞吐量定时器
    作用:让JMeter按指定的吞吐量执行,以每分钟为单位。
    位置:测试计划 --> 线程组--> HTTP请求 --> (右键添加) 定时器 --> Constant Throughput Timer
    参数介绍:
  • Target throughput(in samples per minute):目标吞吐量。注意这里是每个用户每分钟发送的请求数(计算方法:要求QPS * 60 / 线程数)

JMeter分布式

使用场景:单台测试机无法满足用户要求的负载量时,使用多台机器来模拟
JMeter分布式执行原理

分布式相关注意事项

关闭防火墙

所有控制机、代理机、服务器都在同一网络上

所有机器的JMeter和JAVA版本必须一致

关闭RMI SSL开关

JMeter分布式配置和执行
配置 ------ 修改bin/jmeter.properties文件:

  • 代理机:
    -- 修改服务端口: 保证每个代理机都能正常启动。如果是在同一台机器上演示需要使用不同的端口,多台机器可以不修改。例如:server_port=2999(jmeter.properties配置文件中修改)
    -- 将RMI SSL设置为禁用。例如:server.rmi.ssl.disable=true(jmeter.properties配置文件中修改)
  • 控制机:
    -- 配置代理机远程地址:配置每个代理机的IP+port,多个代理机之间用','连接。例如: remote_hosts=192.168.182.100:1099,192.168.182.101:2999(jmeter.properties配置文件中修改)
    -- 将RMI SSL设置为禁用。例如:server.rmi.ssl.disable=true
    执行
  • 代理机(命令行方式启动):
    -- 进入bin目录,运行jmeter-server.bat文件,启动JMeter
  • 控制机(界面方式启动):
    -- 进入bin目录,运行jmeter.bat文件,启动JMeter
    -- 选择菜单:运行-->远程启动/远程全部启动

JMeter测试报告

聚合报告

作用:收集性能测试结束后,系统的各项性能指标。如:响应时间、并发数、吞吐量、错误率等

位置:测试计划->右键->监听器->聚合报告

参数介绍:

-Label:每个请求的名称

  • 样本:各请求发出的数量

  • 平均值:平均响应时间(单位:毫秒)

  • 中位数:中位数,50% <= 时间

  • 90%百分比:90% <= 时间

  • 95%百分比:95% <= 时间

  • 99%百分比:99% <= 时间

  • 最小值:最小响应时间

  • 最大值:最大响应时间

  • 异常%:请求的错误率

  • 吞吐量:吞吐量。默认情况下表示每秒完成的请求数,一般认为它为TPS。

  • 接收 KB/sec:每秒接收到的千字节数

  • 发送 KB/sec:每秒发送的千字节数

补充:正常情况下,取平均值作为响应时间结果,当存在最大值特别高,超出平均水平特别多的的情况,导致平均值不能代表大部分水平时,可以使用百分比时间
HTML报告

作用:JMeter支持生成HTML测试报告,以便从测试计划中获得图表和统计信息

命令:(cmd窗口执行)

jmeter -n -t jmx file -l result file -e -o html report folder

eg: jmeter -n -t hello.jmx -l result.jtl -e -o ./report

参数描述:

-n:非GUI模式执行JMeter

-t jmx file:测试计划保存的路径及.jmx文件名,路径可以是相对路径也可以是绝对路径(脚本路径)

-l result file:保存生成测试结果的文件,jtl文件格式(运行脚本后生成的临时日志文件)

-e:测试结束后,生成测试报告

-o html report folder:存放生成测试报告的路径,路径可以是相对路径也可以是绝对路径

注意:result.jtl和report会自动生成,如果在执行命令时result.jtl和report已存在,必须用先删除,否则在运行命令时就会报错

HTML测试报告:执行完毕后,用浏览器打开生成报告的文件目录下的index文件,效果展示如下(仪表盘显示统计信息)

APDEX (应用性能指标): APDEX:满意度,范围在 0-1 之间,1表示达到所有用户均满意;T(Toleration threshold):容忍或满意阈值; F(Frustration threshold):失败阈值

Requests Summary(请求总结):成功与失败的请求占比,KO指失败率,OK指成功率

Chart(详细信息图表):它包括Throughput(吞吐量) 、Response Times(响应时间)等

Response Times Over Time(脚本运行期间的响应时间变化趋势图)

JMeter性能测试常用图表

掌握性能测试时TPS的计算方法




系数:根据项目情况,业务量未来发展情况,如果项目比较平稳2即可,如果预期未来一年业务量翻5倍则5

能使用JMeter来下载第三方插件

说明:先下载JMeter插件管理工具包,再用此包下载JMeter插件
下载插件管理包的步骤:

  1. 下载包管理工具jar包
    https://jmeter-plugins.org/install/Install/
  2. 将包管理工具jar包添加到JMeter放入到lib\ext目录下
    3.重启JMeter,可以在选项下看到插件管理器
    安装第三方插件的步骤:
  3. 打开Plugins Manager插件管理器
  4. 选择Available Plugins,当前可用的插件
  5. 选择需要下载的插件(等待右方文本内容展示出来)
  6. 下载右下角的下载按钮,自动的完成下载,JMeter会自动重启

理解常用的性能测试图表

Concurrency Thread Group 线程组

阶梯线程组:作用是阶梯加压;图形界面显示运行状态

添加方式:测试计划 --> 线程(用户)--> Concurrency Thread Group

参数介绍:

  • Target Concurrency:目标并发(线程数)
  • Ramp Up Time:加速时间
  • Ramp-Up Steps Count:加速步骤计数
  • Hold Target Rate Time:运行时间
  • Time Unit:时间单位(分钟或者秒)
  • Thread Iterations Limit:线程循环次数
  • Log Threads Status into File:日志记录
    Transactions per Second
    每秒完成事务数:作用是统计各个事务每秒钟成功的事务个数
    添加方式:测试计划 --> 线程组--> 监听器-->Transactions per Second
    Transactions per Second和聚合报告中的TPS在性能测试时的作
    用有何不同,以哪个为准?
    • 性能测试的结果统计,以聚合报告的结果为准
    • 每秒性能指标的作用是:查看系统长时间运行过程中是否有异常出现,有则进一步分析
    Bytes Throughput per Second
    每秒字节吞吐量:作用是查看服务器吞吐流量(单位/字节)
    添加方式:测试计划 --> 线程组--> 监听器-->Bytes Throughput Over Time

使用PerfMon插件监控服务器资源

作用:用来监控服务端的性能资源指标的工具,包括cpu、内存、磁盘、网络等性能数据

添加方法:线程组->监听器->jp@gc - PerfMon Metrics Collector

注意:使用之前需要在服务器端安装监听服务程序并启动

监控服务器资源指标的步骤:

  1. 下载安装包ServerAgent-2.2.3.zip,链接地址:https://github.com/undera/perfmon-agent
  2. 上传到服务器上,并解压ServerAgent-2.2.3.zip
  3. 启动,如果是windows运行startAgent.bat,如果是linux运行startAgent.sh(./startAgent.sh)
  4. 启动这个工具后,jmeter的插件jp@gc - PerfMon Metrics Collector就可以收集服务端的资源使用率,并在
    jmeter中查看了
相关推荐
小小筱筱9 分钟前
LabVIEW笔记:解决周立功CAN卡驱动缺失导致的启动报错问题
笔记·labview
Wang's Blog28 分钟前
PostgreSQL笔记4: 市场地位、生态全景与行业应用实践
数据库·笔记·postgresql
RainCity42 分钟前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
蒸蒸yyyyzwd2 小时前
cpp选手秋招准备 学习笔记day7 webserver
笔记·学习
Chen—LSN4 小时前
C语言——数据在内存中的存储
c语言·开发语言·经验分享·笔记
bitbrowser15 小时前
giffgaff突然停用?先分清闲置停用和长期境外断开
笔记
九硕智慧建筑一体化厂家15 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
AI云海15 小时前
天幕红尘笔记
笔记
青山是哪个青山18 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
蒸蒸yyyyzwd20 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习