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中查看了
相关推荐
Niuguangshuo2 小时前
Python 单例模式笔记
笔记·python·单例模式
互联网杂货铺4 小时前
软件测试之压力测试
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
幸福的达哥4 小时前
后端性能测试优化案例
jmeter·压力测试·安全性测试
心无旁骛~5 小时前
Git笔记汇总,持续更新~
笔记·git
东方芷兰6 小时前
伯克利 CS61A 课堂笔记 12 —— Syntax
笔记·python
柃歌6 小时前
【UCB CS 61B SP24】Lecture 5 - Lists 3: DLLists and Arrays学习笔记
java·数据结构·笔记·学习·算法
梦游钓鱼7 小时前
beremiz笔记chatgpt,部署在Ubuntu:20.04版本
linux·笔记·ubuntu
逻各斯8 小时前
用JMeter给要登录的操作做压力测试
jmeter·压力测试
非 白12 小时前
数据结构——树
数据结构·笔记·考研
E___V___E15 小时前
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
数据库·笔记·mysql