JMeter
2022-05-18 13:27:00 1 举报
AI智能生成
JMeter是一款开源的Java负载测试工具,它可以用于对服务器、网络或对象模拟大量用户并发访问,以测试其性能和稳定性。JMeter提供了丰富的功能,包括测试计划、线程组、请求采样器、断言、监听器等,可以满足各种复杂的测试需求。此外,JMeter还支持多种协议,如HTTP、FTP、JDBC等,可以方便地进行各种类型的性能测试。JMeter的使用非常简单,只需要编写测试脚本,然后运行即可生成详细的测试报告。通过JMeter,用户可以有效地发现系统的性能瓶颈,优化系统性能,提高系统的可用性和可靠性。
作者其他创作
大纲/内容
模拟业务操作对服务器造成压力的过程
负载
模拟用户负载来测试系统在负载情况下,系统的响应时间、吞吐量、等指标是否满足性能要求
性能测试
在一定软硬件环境下,通过不断加大负载(不同虚拟用户数)来确定在满足性能指标情况下能够承受的最大用户数
负载测试
通过测试手段来获取、验证、调整配置信息的过程
配置测试
在一定软硬件环境下,通过高负载的手段来使服务器资源(强调服务器资源,硬件资源)处于极限状态,测试系统在极限状态下长时间运行是否稳定,确定是否稳定的指示包括TPS、RT、CPU Using、Mem Using等
压力/强度测试
在一定软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定
稳定性测试
每秒完成的事务数,通常指每秒成功的事务数,性能测试中重要的综合性性能指标
TPS
指一个事务花费多次时间完成(多长时间响应客户请求)
响应时间
统计更多响应时间然后取平均值,即得到事务平均响应时间 --- 使响应时间更具代表性
平均响应时间
RT/ART:响应时间/平均响应时间
用来分析平均每秒有多少用户访问页面
PV:每秒用户访问页面的次数
模拟真实业务逻辑步骤的虚拟用户
用于描述Vuser在场景中执行的操作
Vuser虚拟用户
目的:测试数据库和程序对并发操作的处理
所有用户在同一时刻做同一件事情或操作
多适用于性能测试、负载测试、压力测试、稳定性测试
对系统的请求操作时完全相同的
强调
侠义
多个用户对系统发出了请求或者进行了操作,但是这些请求和操作使不同的
不限制对系统的请求操作,多适用于混合场景、稳定性测试场景
广义
Concurrency并发
性能测试过程中为了模拟真实用户的业务处理过程,在LoadRunner/Jemter中构建的基于事务、脚本、虚拟用户、运行设置、运行计划、监控、分析等一系列动作的集合,称之为性能测试场景
待执行脚本、脚本组、并发用户数、负载生成器、测试目标、测试执行时的配置条件等
场景包含
场景(Scenario)
模拟正式用户在实际操作时的停顿间隔时间
思考时间指:用户在进行操作时,每个请求之间的间隔时间
业务
思考时间指:脚本中两个请求语句之间的间隔时间
测试脚本
思考时间(Think Time)
说明波动越小,系统越稳定
标准差越小
说明波动越大,系统不稳定
标准差越大
该标准差根据数理统计的概念得来
响应时间标准差
TPS标准差
Running Vuser 标准差
Load 标准差
CPU 资源利用率标准差
Web Resources 标准差
包含
标准差(Std.Deviation)
性能测试相关术语
分支主题
性能
配置元件
前置处理器
定时器
取样器
后置处理器
断言
监听器
JMeter执行顺序
如果存在
前提
存在且取样器的结果不为空
模拟用户操作,向服务器发送Http请求
可以把Http请求元件看成是一个没有界面的浏览器,它可以发送Http请求,接收服务器响应数据
取样器元件有23个
【测试计划】-->【线程组】-->【Sampler】
取样器访问路径
取样器(采样器)
验证结果是否正确
较常用:响应断言
对于复杂的断言可以通过BeanShell脚本来完成
断言元件有13个
【测试计划】-->【断言】
断言的访问路径
添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析使用
展示结果
两个任务
有19个元件
【测试计划】-->【监听器】
访问路径
总结:【取样器】、【断言】、【监听器】组合在一起就可以帮我们完成发送请求,验证结果及记录结果三项工作
X1
比如:对数据库进行操作前需要先建立一个数据库链接
在测试开发过程中,我们在请求发送前可能会做一些环境或者参数的准备工作,可以在前置处理器中完成这些工作
【测试计划】-->【前置处理器】
性能测试中为了模拟大量用户操作我们往往需要做参数化
可以帮助我们从文件中读取测试数据
参数化可以通过配置元件来完成
简而言之它为取样器提供预备数据,然后由取样器发出请求
记录服务器的返回数据,比如Http Cashe Manager,自动记录服务器返回的Cache信息
作用
【测试计划】-->【配置元件】
比如:正则表达式提取器
放在取样器之后,用来处理服务器的返回结果
【测试计划】-->【后置处理器】
总结:【前置处理器】、【配置元件】、【后置处理器】都是为取样器提供数据支持的,取样器关注的是业务逻辑
X2
比如设置登录次数
【测试计划】-->【线程中】-->【逻辑控制器】
控制器(逻辑控制器)
X3
为了能够真实的模拟用户负载,我们有时会需要模拟这些请求在同一时刻发送
集合的功能
【测试计划】-->【线程组】-->【定时器】
X4
模拟大量用户负载
模拟多少用户,一线程一用户
可以设置运行的线程数
设置运行时长、定时运行
JMeter Plugin
第三方插件
【测试计划】-->【Threads(Users)】
线程组
X5
X1--X5
包含负载模拟部分,负责模拟用户请求
Y1
结果验证部分,负责验证结果正确性
Y2
Y1--Y2
负载结果的收集
Z
三维空间
体系机构
根节点
要素一:脚本中测试计划只能有一个
JMeter负载是通过线程组驱动的,所以计划中至少要出现一个线程组
把不相关连的业务分布在不同的线程组
测试计划支持多个线程组
要素二:测试计划中至少要有一个线程组
子主题 1
要素三:至少要有一个取样器
测试结果用来衡量系统性能,从结果中分析系统性能
要素四:至少要有一个监听器
测试计划要素
1、安装
日志设置、JVM设置、启动文件、启动jar包、实例脚本
放置了各项配置文件
Bin
放置了JMter API 离线帮助文档,Web方式
Docs
JMter辅助功能
Extras
JMter组件以jar包的 形式放置在lib/ext目录下
Lib
离线帮助文件放置目录
licentable
license说明文件
LICENSE
版权声明
NOTICE
JMter简明介绍
README
2、JMter工具目录介绍
放入path中
建立JAVA_HOME
JMETER_HOME
3、环境变量
4、启动
JMeter环境介绍
第三章:JMter体系结构
安装
录制得脚本可以直接导出jmx格式,jmx是JMeter脚本保存得格式
模仿浏览器发送表单信息到服务器,每一个资源都将作为请求发送
Request方式
工具栏中得“N”即切换成Navigation方式
记录用户鼠标动作,类似于著名的自动化测试工具QTP,回放时模拟一个个点击
Navigation方式
录制方式
默认的脚本根节点
Test Suit 1:
一个业务功能的脚本存放在此目录下
测试活动根节点
Test 1:
eg:一个业务过长,可分成多个测试步骤
测试活动的步骤
Test 2:
Script目录树
Badboy
在“用户定义的变量"中定义
设置用户全局变量
不设置时,每个线程组同时运行
独立运行每个线程组
关闭主线程后运行teardown程序来正常关闭线程组(运行的线程本次迭代完成后关闭)
Run teardown Thread Groups after shutdown of main threads
此项记录较多的数据hu
需要获取服务器返回的详细信息,选中此项
此项记录较多的数据会影响测试效率,执行性能测试时,关闭此项
函数测试模式
把测试需要依赖的jar包或包所在的目录加入类路径
Add directory or jar to classpath
Test Plan:测试计划
模拟虚拟用户的发起点
设置线程数
运行次数
运行时间
定义调度时间与运行时长
设置
ThreadGroup:线程组
Implementtation-HC4CookieHandler
移动应用中广泛使用
HttpClient4
JMeter中默认协议
RFC2109
神级版本,只为取代RFC2109
RFC2965
最原始的Cookies规范
Netscape
尽可能多的适应不同的服务器
Browser Compatibility
忽略所有Cookie
静态页面适应
Ignore Cookies
HttpClient3
两组程序实现支持Cookie标准
HTTP Cookie Manager
User Defined Variables:用户自定义变量
User-Agent
Connection
content-type
Cookie
location302 重定向地址
HTTP Header Manager:管理HTTP头信息
在【逻辑控制器】下
循环控制器
Step1
HTTP请求
JMeter-脚本中各元件
jmeter通过代理方式来录制脚本
打开浏览器 -【工具】-【Internet】 - 【链接】 - 【局域网设置】
浏览器配置代理
eg:在【线程组】增加【简单控制器】
在目标控制器中选择
决定将来录制的脚本放在哪个目录
目标控制器
罗列出录制到的所有Http请求
不对样本分组
加入以分割线命名的简单控制器
在组间添加分隔
每个URL产生的请求放在一个控制器下
每个组放入一个新的控制器
只录制产生动态数据的HTTP请求
只存储每个组的第一个样本
每个URL的请求放入一个事务,不管他们有多少HTTP请求,只要是这个URL请求产生的
每个请求放入一个新的事务控制器
分组
把Header头信息也录制下来
记录HTTP信息头
检查点
添加断言
检查点用正则表达式来匹配内容
Regex matching
Http Sampler settings
【测试计划】- 【非测试元件】-【HTTP代理服务器】
JMeter中配置代理
配置代理
JMeter配置代理进行录制
利用JMeter元件来获取服务器返回的动态数据
可从服务器响应数据中查找我们需要的数据
JMeter的关联元件
随意设置,有业务意义
名称
可为空
注释
匹配范围包括当前父取样器并覆盖至子取样器
Main sample and sub_samples
匹配范围是当前父取样器
Main sample only
仅匹配子取样器
Sub-samples only
支持对JMeter变量值进行匹配
JMeter Variable
应用范围,4个选项
Apply to
响应数据的主体部分,排除Header部分;Http协议返回请求的主体部分就是Body
主体
针对替换了转义码的Body部分
Body(unescaped)
返回内容作为一个文档进行匹配
Body as a Documet
只匹配信息头部分的内容
信息头
只匹配URL链接
URL
匹配响应代码,比如HTTP协议返回码200代表成功
响应代码
匹配响应信息,比如处理成功返回“成功 ”字样,或者“OK”字样
响应信息
针对响应数据的不同部分进行匹配,7个选项
要检查的响应字段
eg:${应用名称} 来访问
匹配出来的信息通过此名称进行访问
引用名称
正则表达式提取器使用此串进行信息匹配
正则表达式
$1$:第一个模板
$2$:第二个模板
.......
$0$:全文匹配
正则表达式可设置多个模板进行匹配,在此可指定运用哪个模板,模板自动编号
模板
用匹配数字确定取这组值中的哪一个
负数取所有值,可与For Each Controller 一起使用遍历
匹配数字
没有匹配到可指定一个默认值
默认值
Regular Expression Extractor:正则表达式提取器
元件
JMeter 关联
参数化
eg:HTTP信息头管理
存储服务器的响应信息
JDBC Connection Configuration 配置与数据库连接
eg:测试SQL
初始化设置
从指定文件(一般为文本文件)中一行一行的提取文本内容
根据分隔符拆解这一行的内容把内容与变量名对应,拆解后的变量供提取器引用
可随意设置,有业务意义
绝对路径
根节点是JMeter的启动目录(%JMETER_HOME%\\bin)
分布到多台负载机,确保每个负载机执行脚本的参数化文件可以读到
优点
相对路径
参数化参数文件的路径
引用:${url}
在【用户自定义变量】中设置变量
变量
引用文件地址
Filename:文件名
UTF-8
File encoding:文件编码
用逗号隔开,与参数文件中参数一一对应
多余的参数取不到值
比参数文件中参数列多
JMeter会自动对应
参数文件中部分列没有参数对应
Variable Names:变量名称
用来分隔参数文件的分隔符,默认为逗号
用tab分隔, 写法 '\\t'
Delimiter(use '\\t for tab'):分隔符
允许拆分完成的参数里面有分隔符出现
是
Allow quoted data?: 是否允许带引号
参数文件循环遍历
参数文件遍历完后不循环
否
Recycle on EOF?: 遇到文件结束符是否再次循环
停止测试
不停止测试
与Recycle on EOF中的False复用;
Stop thread on EOF?: 遇到文件结束符停止线程
对所有线程共享
All threads
支对当前线程组中的线程共享
Current thread group
仅当前线程获取
Current thread
Sharing mode:共享模式
参数
CSV Data Set Config:CSV 数据文件设置
函数助手
在【用户自定义的变量】定义参数
访问地址参数化
把重复的内容分离,只定义一次
【HTTP请求默认值】
HTTP请求默认值
JMeter参数化
获取服务器响应数据,根据断言规则取匹配这些响应数据
对响应数据进行规则匹配
Response Assertion:响应断言
JMeter 检查点
TPS:每秒事务数
多个操作统计为一个事务
【逻辑控制器】 -- 【事务控制器】
如果事务控制器下有多个取样器(请求),勾选后,在“查看结果树”中既可以看到事务控制器也可以看到每个取样器
其中一个失败,代表整个事务失败
事务控制器定义事务取决于子事务都成功
Generate parent sample
是否包括定时器、预处理和后期处理延迟的时间
Include ...
事务控制器
JMeter 事务
集合点能够尽量让虚拟用户同一时刻发送请求
固定定时器
随机定时器
.....
控制取样器的执行时机
JMeter 集合点
第四章:JMter脚本开发
用来尽量模拟用户操作的工作单元
通过线程组设置来完成
场景
视窗运行
GUI
jmeter -n -t [jmx脚本路径] -l [测试输出结果文件路径]
java -jar %JMETER_HOME%\\bin\\ApacheJMERER.jar -n -t %JMETER_HOME%\\script\\Jforum4-1-01.jmx -r -l result.jtl
%JMETER_HOME%\\bin\\jmeter -n -t %JMETER_HOME%\\script\\Jforum4-1-01.jmx -l %JMETER_HOME%\esult\esults.jtl
eg:
运行测试计划
非GUI方式运行
-n
指定运行的测试脚本地址与名称
相对路径的根是命令窗口的当前路径
可以是相对路径
-t
查看帮助
-h
查看版本
-v
eg:jmeter.properties文件中设置的
指定读取JMeter属性文件
-p
记录测试结果到文件,指定文件地址和名称
-l
以服务器方式运行【远程方式,启动Agent】
-s
设置代理,一般填写代理IP
-H
设置代理端口
-P
代理账号
-u
代理口令
-a
定义JMeter属性,等同于在jmeter.properties中进行设置
-J
定义JMeter全局属性,等同于在Global.properties中进行设置,线程间可共享
-G
定义系统属性,等同于在system.properties中进行设置
-D
加载系统属性文件,可通过此参数指定加载一个系统属性文件,此文件可以用户自己定义
-S
比如DEBUG、INFO、ERROR等
定义JMeter日志级别
-L
开启远程负载机,远程机器列表在jmeter.prroperties中指定
-r
开启远程负载机,-R可以指定负载IP,此项会覆盖jmeteer.properties中remote_hosts的设置
-R
指定JMeter Home目录
-d
停止远程执行
-X
运行参数
命令
命令窗口运行
非GUI
JMeter的场景运行方式
获取运行状态收集测试结果
性能测试监控的主要任务
以表格的形式显示取样器结果
不同取样器拥有相同名字,Summary Report中会统计到同一行
建议:按业务功能取名,最好不为空
Summary Report
Aggregate Report
长时间执行测试计划使用的监听器
JMeter 监听器
测试监听
第五章:JMeter 负载与监听
没事经常拌嘴,偶尔互相赞美,看似彼此心动,只为急死听众
看看当下的你,审视过去的你,想象未来的你
对元件的执行逻辑进行控制
一次控制器排除
控制器下可以嵌套别的种类的逻辑控制器
1、从“用户自定义的变量”获取到变量对应的值,作为循环控制器的循环条件
2、循环控制器输出变量作为取样器的参数
输入变量前缀
循环变量下标起点
Start index for loop
循环变量下表终点
End index for loop
循环控制器生成的变量名称
输出变量名称
变量前缀后是否加“_”作为分隔符
Add “_”......
参数说明
1、http请求
2、正则表达提取器,提取需要的内容
3、添加一个ForEath Controller 【循环控制器】
4、在【步骤3】下添加一个Http Request,访问参数由ForEath Controller 【循环控制器】传递过来
完整步骤
ForEath Controller 【循环控制器】
用来指定一个执行单元,不改变元件的执行顺序
可嵌套其他控制器
Simple Controller【简单控制器】
在执行时会执行导入的测试计划
被导入的测试计划不能有线程组,只包含简单控制器及控制器下的元件 --- 相当于一个执行单元
用来导入外部的测试片段
必输字段,没有则会报错
文件名
Include Controller
时长单位是秒
用来控制其子元件的执行时长
默认为1
此时不执行其节点下的元件
去掉1则默认为0
Runtime(seconds)
Runtime Controller
第一个取样器编号为0
第二个取样器编号为1
以此类推 ....
指定运行的取样器编号
则运行第0个取样器
指定的编号超出下面的节点数或者不指定
匹配不上则不运行去取样器
名称匹配时大小写及空格都敏感
指定取样器名称
数字
默认并找取样器名称为default的取样器
匹配不上
不运行
没有
字符
Switch Value【匹配值】
Switch Controller【条件控制器】
其节点下的元件将一直运行直到While条件为false
接受变量表达式与变量
Condition
当循环中有取样器失败后停止
Blank
当循环前有取样器失败则不进入循环
LAST
当判断条件为false时停止循环
Otherwise
While Controller【条件控制器】
其节点下的取样器会交替执行
忽略子控制器,即子控制器失败,由交替控制器接管
Ignore .....
Interleave Controller【交替控制器】
此控制器下的子元件只运行一次
把仅一次控制器放在循环控制器下也只是运行一次
Once Only Controller【仅一次控制器】
用来控制其下元件的执行次数
Total Executions
Percent Executions
吞吐量控制器有两种模式
Throughput Controller【吞吐量控制器】
包括
逻辑控制器
设置参数,设置默认值
设置定时,模拟并发场景
在取样器运行前作好数据准备工作
对取样器结果进行分析,截取等操作
验证结果的正确性
监听及显示JMeter取样器测试结果
功能
位置
"__":英文半角两个下横线
function是函数名
参数视不同函数而定
${__function()}
调用
在“值中输入两个字符串相加”,点击【生成】
BeanShell语法得程序语句或BeanShell脚本文件
入参
__BeanShell 脚本语言
接受多个数字
将一组数字转换成Unicode字符
__char
作为一个计数器使用,支持多线程
__counter
编号从0开始
1、读取固定值
next()会告知程序下次迭代取下一次数据
2、读取动态值
提取C:\\Users\\郭\\Desktop\\123\\123.txt文件中得值
3、可以使用文件别名
从文件中读取指定列得值
__CSVRead
引号转成HTML为"
空格转成HTML为 
把字符串转换成Html格式得字符
__escapHtml
途中转换后存入到test变量中
${test}
把正则表达式转换成Java正则引擎能够识别得表达式
__escapeOroRegexpChars
可以用此函数表达式来嵌套引用表达式
用来返回一个表达式得值
__eval
在用户自定义参数定义变量
${__evalVar(username)}
通过__evalVar调用
用来返回表达式得结果,并将结果存入一个变量,供Sampler引用
Query = select ${column} from ${table};当column = name;table = cutomers时
${__evalVar(query)} = select name from cutomers
支持嵌套表达式
__evalVar
读取文件中内容,保存到变量firstv中
然后引用firstv这个变量
也可以一次性读取文件内容,保存到变量;此变量可由其他Sampler引用
用来读取文件
__FileToString
用来对整数求和,支持多个整数累加,多个数之间用逗号分隔
__intSum
与__intSum类同,把整数变为长整型
__longSum
此函数用来返回JavaScript脚本得执行结果,也可以调用JavaScript中得库函数
__javaScript
提供对JEXL表达式得支持
JEXL是一种表达式语言解释器
__jexl
String to be logged:将会被日志输出得字符串
OUT
ERR
DEBUG
INFO
ERROR
日志级别
日志方法,返回输入得字符串信息
写日志
__log
与__log类似,不过它只记录一条日志,不反回值
__logn
该函数引用返回本机IP
可被其他Sampler引用
带参数
不带参数
都可返回本机IP
引用方式
__machineIP
该函数返回本机得机器名
引用方式同__machineIP
__machineName
默认值为1
获取属性得函数,可以获取命令行中定义得属性
__p
该函数用来获取JMeter的属性
__property
此变量可被其他的Sampler引用
该函数可生成一个一定范围内的随机数并保存到指定变量
__Random【随机数函数】
支持中文
该函数可生成指定长度的随机字符串并保存到指定变量
__RandomString【随机字符串函数】
该函数用来正则匹配一个Sampler的返回值
__regexFunction【正则表达式提取函数】
该函数用来获取当前的Sampler的名称
__samplerName
动态设置JMeter属性
__setPropert
用Split_1访问拆分的第一个字符串,如未匹配到则用?代替
引用
该函数用来拆分字符串
__split
该函数从文件中读取内容,一行一行的读取
读完后重头开始
每调用一次打开一个文件
__StringFromFile
该函数返回测试计划的名称,即当前脚本的文件名
__TestPlanName
返回当前线程号
__threadNum
返回当前时间,可以指定返回格式,由SimpleDateFormat类处理函数格式
__time
eg:\\转成CRLF
反转eacape
__unescape
eg: ; ;转成空格
反转URL连接中的Unicode编码字符
__unescapeHtml
eg:Word + %22school%反转成Word “school”
反转URL连接中的Unicode字符
__urldecode
把函数URL连接中的escap字符转成Unicode编码
__urlencode
生成的字符串是唯一的
__UUID
执行变量表达式并返回结果
__V
该函数从XML格式的文件匹配内容
每次调用返回一个匹配值,到达尾部从头开始
匹配不到返回空
表达式
方式
__XPath
JMeter 元件详解
JMeter
0 条评论
回复 删除
下一页