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