【Performance】03.性能测试技术初探篇之JMeter工具使用
1. 安装配置及启动
jmeter软件包可在Apache官网进行下载,官网地址如下,选择二进制文件(Binaries)进行下载后解压即可,无需安装步骤。
1
https://jmeter.apache.org/download_jmeter.cgi
在启动jmeter之前,需要确保电脑已正确安装并配置Java环境(建议Java8+),否则将无法启动。
jmeter执行程序在解压路径内的bin目录下,windows与Linux/macOS环境的启动方式有所不同,如下说明。
Windows: 通过文件管理器进入apache-jmeter-5.4.3\bin路径,双击
jmeter.bat
即可(具体路径自行替换)。
linux/macOS:通过终端,执行命令cd apache-jmeter-5.4.3\bin && ./jmeter.sh
即可(具体路径自行替换)。如上所说,无论是windows还是Linux/macOS,想要运行jmeter,就必须进入jmeter执行程序所在目录下,否则终端将会“无法找到此命令”等提示信息。因此,若要在终端内的任何路径下都能通过一条命令直接启动jmeter,可通过配置环境变量的方式,来实现该效果。
Windows配置环境变量
MacOS配置环境变量
1
2
3
4
5
6
7
8# 1. 编辑bash_profile文件
vi $HOME/.bash_profile
# 2. 按i键进入编辑模式,在文件最后添加如下两行内容
export JMETER_HOME=/Users/hyggeoha/Applications//apache-jmeter-5.4.3 # 根据个人实际情况修改
export PATH=$PATH:$JMETER_HOME/bin
# 3. 按esc键退出编辑模式后,输入:wq命令以保存并退出。
# 4. 输入如下命令使之生效
source $HOME/.bash_profile
以MacOS为例,在任意路径打开终端,输入
jmeter
后回车,jmeter程序即可启动。注意:启动后,终端窗口不可关闭,否则jmeter程序也会随之而退出。
2. 界面介绍
JMeter主页面如下图所示,分为标题栏、菜单栏、工具栏、组件树页面、内容页面。
3. 常用配置元件介绍
参考资料:https://jmeter.apache.org/usermanual/component_reference.html
3.1. 采样器
3.1.1. FTP请求
此采样器可用于发送取回文件
或上传文件
给FTP服务器。当下载文件时,可将文件存储于磁盘(本地文件)和/或放在响应数据中。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Server Name or IP | FTP服务器的域名或IP地址 | 是 |
Port | FTP端口,如果填的端口<=0,JMeter则使用默认的FTP端口 | 否 |
Remote File | 要检索的文件,或上传的目标文件名称 | 是 |
Local File | 要上传的本地文件,或要下载的目标文件(默认服务器文件名称) | 上传时必填 |
Local File Contents | 提供上传的文件内容,会覆盖Local File属性 | 上传时必填 |
get/put | 检索还是上传文件,单选 | 是 |
Use Binary Mode | 是否使用二进制模式,默认ASCII | 是 |
Save File in Response | 是否将检索到的文件内容存储在响应数据中 | 下载时必填 |
Username | FTP账户用户名 | 否 |
Password | FTP账户密码 | 否 |
3.1.2. HTTP请求
此采样器可用于发送HTTP/HTTPS
请求给Web服务器,以及控制JMeter是否解析图像的HTML文件和其他嵌入资源,并发送HTTP请求来检索它们。如:图像、Applet、样式表(CSS)和从这些文件引用的资源、外部脚本、框架/内嵌框架、背景图像(正文、表格、TD、TR)、背景声音等。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Server | Web服务器的域名或IP地址(不包含http前缀) | 是 |
Port | Web服务器正在监听的端口,默认值:80 | 否 |
Protocol | HTTP请求协议,如:HTTP、HTTPS、FILE等 | 是 |
Method | 请求方法,如常见的:GET、POST、DELETE、PUT等 | 是 |
Content Encoding | 要使用的内容编码 | 否 |
Redirect Automatically | 将基础http协议处理程序设置为自动重定向,设置后不会作为样本出现 | 否 |
Follow Redirects | 将基础http协议处理程序设置为跟踪重定向(未启用自动重定向时可用) | 否 |
Use KeepAlive | 请求是否保持活动连接 | 否 |
Use multipart/form-data | 是否对POST请求使用multipart/form-data类型数据 | 否 |
Path | 资源的请求地址,如果资源需要查询参数,在Parameters中进行配置 | 否 |
Parameters | 资源请求时所需要的参数,每一个参数都需要有参数名和值 | 否 |
Body | HTTP请求体, | 否 |
Files Upload | 待上传的文件名,如果为空,JMeter不会发送文件;如果填写,JMeter会自动以multipart form形式发送请求 | 否 |
3.1.3. JDBC请求
此采样器可用于将JDBC请求(SQL查询)发送到数据库。在使用它之前,需要添加一个JDBC Connection Configuration
元件,参见3.4.5. JDBC连接配置章节。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Variable Name of Pool declared | 连接池绑定到的JMeter变量的名称,必须与JDBC连接配置的变量名称 字段一致 |
是 |
Query Type | 查询类型,下拉选择,包含:选择语句、更新语句、预准备语句、可调用语句、提交、回滚等 | 是 |
SQL查询 | SQL查询语句,不需要输入行尾的分号 | 是 |
Parameter values | 以逗号分隔的参数值列表 | 预准备语句和可调用语句必填 |
Variable Name | 以逗号分隔的变量名称 | 否 |
Result Variable Name | 以逗号分隔的结果变量名称 | 否 |
Query timeout(s) | 为查询设置超时(单位:秒),空值表示0代表无限制,-1代表不设置任何查询超时,默认值为0 | 否 |
Limit ResultSet | 限制循环访问结果集的行数,空值表示-1 | 否 |
Handle ResultSet | 定义如何处理从可调用语句返回的结果集,包含:存储为字符串、存储为对象、计数记录等 | 否 |
3.2. 逻辑控制器
逻辑控制器确定采样器的处理顺序
3.2.1. 事务控制器(Transaction Controller)
事务控制器额外生成一个样本,用于测量其子级采样器的测试数据,常用于将单个事务的一个活多个采样器进行归纳合并,便于统计单个事务的样本性能情况。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 是 |
Generate Parent Sample | 是否生成父样本,如果勾选,将为其子级的采样器生成父级样本,否则子级的采样器将会单独生成样本 | 是 |
Include duration of timer and pre-post processor in generated sample | 是否在生成样本时包含计时器、预处理器和后置处理器的延迟时间,默认不勾选 | 是 |
3.2.2. 循环控制器(Loop Controller)
循环控制器下存在子级的控制器或采样器时,JMeter将会按照循环控制器的设置,循环运行它们一定次数。循环总次数=循环计数*线程组循环次数。例如:
- 线程组循环次数为2次,循环控制器循环次数为3次,那么循环控制器下的Homepage采样器将会被执行6次。
- 线程组循环次数为10次,循环控制器循环次数为无限,那么循环控制器下的Homepage采样器将会被无限循环执行。
- 线程组循环次数为无限,循环控制器循环次数为20次,那么循环控制器下的Homepage采样器将会被无限循环执行。
- 线程组循环次数为10次或无限,且持续时间为60秒,循环控制器循环次数为5次或无限,那么循环控制器下的Homepage采样器将会被无限循环执行,直至60秒后停止。
3.2.3. 判断控制器(IF Controller)
判断控制器通过配置的判断表达式(计算结果必须为boolean值)的执行结果,来控制其子级的配置元件是否运行。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Condition | 默认情况下,填写可返回boolen值的JavaScript表达式,但也可填写为变量表达式(Interpret Condition as Variable Expression被勾选时) | 是 |
Interpret Condition as Variable Expression? | 此项勾选时,必须在Condition中输入计算结果为true 的表达式(忽略大小写) |
是 |
Evaluation for all children | 子级是否计算,未勾选时,仅在首次进入运行时计算 | 是 |
3.3. 监听器
3.3.1. 图表结果
图表结果用于生成一个简单的图表,绘制所有采样器的采样时间,展示的内容包含:当前样本(黑色)、所有样本当前平均值(蓝色)、当前标准差(红色)、吞吐率(绿色)和中位数值(紫色)。
3.3.2. 断言结果
断言结果可视化工具展示每一个样本的标签,同时展示测试计划中所有断言的结果。
3.3.3. 查看结果树
查看结果树以树状列表的形式展示所有采样器的响应情况,允许查看每一个样本的请求信息、响应信息、耗时、状态码等,样本状态成功时为绿色,失败时为红色,以此判断各采样器配置的正确性。
3.3.4. 聚合报表
聚合报表(Aggregate Report)也称为汇总报表,它为测试计划中每一个不同命名的请求创建一个表行,对于每个请求,汇总响应信息、请求计数、平均值、最大值、最小值、错误率、吞吐量等性能指标信息,性能测试结果的分析数据来源也一般参考于此。
字段名称 | 英文名称 | 含义 |
---|---|---|
标签 | Label | 采样器的标签名称 |
样本 | #Samples | 具有相同标签的样本发送总数量 |
平均值 | Average | 该样本的结果集的平均时间 |
中位数 | Median | 该样本结果集的中位数,剩余50%至少需要这么长时间 |
90%线 | 90%Line | 90%的样本数量的最长时间,剩余10%至少需要这么长时间 |
95%线 | 95%Line | 95%的样本数量的最长时间,剩余5%至少需要这么长时间 |
99%线 | 99%Line | 99%的样本数量的最长时间,剩余1%至少需要这么长时间 |
最大值 | Max | 该样本结果集中的最长时间 |
最小值 | Min | 该样本结果集中的最短时间 |
错误率 | Error% | 该样本内包含错误请求的百分比 |
吞吐量 | Throughtput | 以每秒/分钟/小时的请求数量来衡量服务器的处理能力,当导出为csv文件时,单位为:请求/秒 |
接收速率 | Received KB/s | 客户端每秒钟接收的千字节数据,衡量客户端与服务端的网络通信能力 |
发送速率 | Send KB/s | 客户端每秒钟发送的千字节数据,衡量客户端与服务端的网络通信能力 |
3.3.5. 总结报表
总结报表(Summary Report)也称为摘要报表,报表内容与3.3.4. 聚合报表类似,新增了两个字段,如下表所示。
字段名称 | 英文名称 | 含义 |
---|---|---|
标准偏差 | Std.Dev. | 该样本的消耗时间的标准偏差 |
平均字节大小 | Avg.Btyes | 该样本响应报文的平均字节大小 |
3.3.6. 响应时间图
响应时间图以线状图的形式,将测试过程中的响应时间变化请求绘制成折线图,如果同一个时间戳包含多个样本,则会展示平均值。
3.4. 配置元件
3.4.1. CSV数据集
csv数据集用于从外部文件中按行读取数据,再按照指定分隔符分隔成多个变量,其非常适合处理大量的变量。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Filename | 文件名称,建议使用相对路径,并将数据集文件与jmx脚本放置在同一层路径下 | 是 |
File Encoding | 文件内容编码 | 否 |
Variable Names | 变量名,如有多个,用英文逗号分隔 | 否 |
Use first line as VariableNames | 是否读取第一行作为变量名。当Variable Names 为空时使用,且如果Variable Names 为空时,数据文件中第一行将被作为变量名使用 |
否 |
Delimiter | 内容分隔符,建议使用与数据内容无关的字符 | 是 |
Allow quoted data | 是否允许数据包含引号 | 是 |
Recycle on EOF? | 文件内容循环结束后是否重新循环 | 是 |
Stop thread on EOF? | 文件内容循环结束后是否停止线程 | 是 |
Sharing mode | 共享模式 All threads:文件在所有的线程和线程组之间共享,总打开次数=1 Current thread group:当前线程组用到此文件时打开一次,总打开次数=用到的线程组数 Current thread:线程用到此文件时打开一次,总打开次数=用到的线程组数*线程数 |
是 |
3.4.2. HTTP缓存管理器
HTTP缓存管理器用于向其范围内的HTTP请求添加缓存功能,以模拟浏览器的缓存功能,每个虚拟用户线程都会生成自己的缓存。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Clear cache each iteration | 每次循环时是否清除缓存 | 是 |
Use Cache Control/Expires header when processing GET requests |
处理GET请求时,是否使用缓存控制/过期标头 | 是 |
Max Number of elements in cache | 缓存中元素的最大数量,缓存的元素越多,该配置元件消耗内存越大,需要 适时修改jmeter启动脚本中的 -Xmx 选项 |
是 |
3.4.3. HTTP Cookie管理器
HTTP Cookie管理器主要具备以下两个功能:
- 模拟网络浏览器一样存储和发送cookies,例如有一个HTTP请求的响应中包含cookie,那么HTTP Cookie管理器会自动存储该cookie,并在后续的http请求中使用该cookie,每一个线程都有自己的cookies存储区域。
- 允许手动将cookies信息添加到HTTP Cookie管理器中,这部分的cookies信息将会被共享于所有线程。
![HTTP Cookie管理器配置示例](【Performance】03-性能测试技术初探篇之JMeter工具使用/HTTP Cookie管理器配置示例.png)
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Clear cookie each iteration | 每次循环时是否清除cookie | 是 |
Use Thread Group configuration to control cookie clearing |
使用线程组配置来控制cookie是否清除 | 是 |
Cookie Policy | 将用于管理cookie的政策,保持默认即可 | 是 |
Use-Defind Cookies | 用户自定义的cookie | 否(不鼓励,除非你知道你在干什么) |
3.4.4. JDBC连接配置
JDBC连接配置元件从提供的JDBC连接设置创建数据库连接,当业务请求的返回体中未包含后续样本所需的数据,以及需要针对数据库性能进行测试等场景时,就需要用到这个配置元件。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Variable Name for created pool | 数据库连接池的变量名 | 是 |
Max Number of connections | 连接池中的最大连接数 | 是 |
Max Wait(ms) | 最大等待时间(毫秒),如果尝试连接的过程中超时最大等待时间,则连接池就抛出错误 | 是 |
Time Between Eviction Runs(ms) | 线程可空闲时间(毫秒),如果当前连接池中某个链接在空闲了指定时间后仍然没有使用,则被物理性的关闭掉 | 是 |
Auto Commit | 是否自动提交 | 是 |
Transaction isolation | 事务隔离级别 | 是 |
Preinit Pool | 连接池会被立即初始化,如果设置为False(默认) ,使用此连接池的JDBC请求采样器可能会测量第一个查询的更高响应时间 |
否 |
Init sql statements separated by new line | SQL语句集合,当首次创建物理连接时执行一次 | 否 |
Test While Idle | 闲置时测试,保持默认即可 | 是 |
Soft Min Evictable Idle Time(ms) | 闲置时间,保持默认即可 | 是 |
Validation Query | 校验查询语句,从下拉列表中选择一条简单的语句,验证数据库连接是否仍在响应 | 否 |
Database URL | 数据库的JDBC连接字符串 | 是 |
JDBC Driver class | JDBC的驱动类,根据所使用的数据库进行选择,类文件必须在JMeter/lib文件夹下存在 | 是 |
Username | 数据库连接用户名 | 否 |
Password | 数据库连接密码 | 否 |
Connection Properties | 数据库建立连接时要设置的连接属性 | 否 |
3.4.5. 用户自定义变量
用户自定义变量元件允许用户自定义和初始化变量集,供后续的配置元件使用。
注意:
- 用户自定义变量配置文件无需指定位置,它会在开始执行测试前进行处理。
- 如果一个测试计划中包含多个线程组,请确保对不同的值使用不同的变量名,因为该元件会在线程组之间共享。此外,这些变量在元素处理完毕后才能使用,因此你无法引用在同一元素中定义的变量。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
User Defined Variables | 变量键值对,name中的内容将放在变量表达式${...} 构造的括号中,整个${...} 将会在运行时自动替换成对应的值 |
否 |
3.4.6. 随机变量
随机变量配置元件用于生成随机的数字字符串,并存储在变量中,供后续的配置元件使用。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 是 |
Variable Name | 变量名称,用于存储随机字符串值 | 是 |
Format string | 指定随机字符串的格式。 例如“000”将会生成3位数的随机字符串, “user_0000”将会生成类似于 user_0294 的随机字符串 |
否 |
Minimum Value | 随机数生成器的取值范围最小值 | 是 |
Maximum Value | 随机数生成器的取值范围最大值 | 是 |
Random Seed | 随机种子,如果指定了随机种子,并将Per Thread(User)设置为True ,则每个线程得到的值相同;为空时,将使用随机的默认构造函数生成随机种子 |
否 |
Per Thread(User)? | 如果为False ,则生成器在线程组中的所有线程之间共享,否则每个线程都会有自己的随机生成器 |
是 |
3.4.7. 计数器
允许用户添加一个计数器,在整个线程组中进行引用,计数器配置的内容包含:起始点、增量和终止点(含)。计数器将会在起始点循环计数到终止点,循环完成后再次从起始点开始,直至测试结束。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Starting value | 计数器的起始值,未填时默认为0 | 否 |
Increment | 技术增量,默认为0,表示无增量 | 是 |
Maximum value | 计数器的最大值,默认值是Long类型 | 否 |
Format | 计数器输出的数字格式,例如“000”将会生成3位数的随机字符串, “user_0000”将会生成类似于 user_0294 的随机字符串 |
否 |
Exported Variable Name | 变量名称,用于存储计数器的值 | 否 |
Track Counter Independently for each User | 是否为每个用户单独分配计数器。 未选中时,计数器是全局的,第一次迭代时,用户1获得1,用户2获得2,依次类推; 若选中,则第一次迭代时,所有用户获得的值均是1 |
否 |
Reset counter on each Thread Group Iteration | 此选项仅在计数器为每个用户单独分配时有效。 选中时,计数器将重置为每个线程组迭代的起始值,当计数器在循环控制器内时将会很有用 |
是 |
3.5. 断言
断言用于对采样器进行额外的检查,并在同一范围内的每个采样器之后进行处理。
3.5.1. 响应断言
响应断言通过配置字符串,与请求报文或响应报文中的各个字段进行比较,根据比较结果,返回断言成功或失败,字符串的模板包含以下两种:
- Contains,Matches:字符串包含或匹配,perl5风格的正则表达式;
- Equals,Substring:字符串等于或子集,纯文本内容,区分大小写。
例:某页面访问正常时,响应体中包含Pi Dashboard
字段,对应的响应断言配置如下。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Apply to: | 应用范围: Main sample only:仅应用于主采样器 Sub-samples only:仅应用于子采样器 Main sample and sub-sample:应用于两者 Jmeter Variable Name to use:将赋值给变量名 |
是 |
Field to Test | 待测试字段,用于指示JMeter要断言测试请求或响应的哪个字段 | 是 |
Ignore status | 忽略状态,选中时,在断言测试结果出来之前,默认是成功的 | 是 |
Pattern Matching Rules | 模式匹配规则 Contains:正则表达式,文本与正则表达式匹配,则为true Matches:正则表达式,整个文本与正则表达式匹配,则为true Equals:纯字符串,文本与模式字符串相等时为true,区分大小写 Substring:纯字符串,文本包含模式字符串时为true,区分大小写 |
是 |
Pattern to Test | 模式测试列表,每一条模式都将被测试,当其中一条 断言失败时,停止断言,断言结果为失败 | 是 |
Custom failure message | 自定义失败信息,断言结果失败时,自定替换成您自定义的失败信息 | 否 |
3.5.2. 持续时间断言
持续时间断言用于测试每个响应是否在指定时间内收到,任何消耗超过指定时间(毫秒)的响应,都将被标记为失败的响应。
例:访问某页面的请求,通过持续时间断言,验证该页面是否在5秒内完成响应。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Duration in Milliseconds | 可被允许的响应耗时的最大值,单位为毫秒 | 是 |
3.5.3. 大小断言
大小断言用于测试每个响应的字节大小,可以指定测试比较的类型,包含等于、不等于、大于等于、小于等于、大于、小于等。
例:某用户登录的请求,当登录成功时响应报文的字节大小约为25000Bytes,失败时约为1041Bytes,大小配置示例如下。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Apply to: | 应用范围: Main sample only:仅应用于主采样器 Sub-samples only:仅应用于子采样器 Main sample and sub-sample:应用于两者 Jmeter Variable Name to use:将赋值给变量名 |
是 |
Response Size Field to Test | 待测试响应大小的字段,包含:所有响应内容、响应头、响应体、响应状态码、响应消息等 | 是 |
Size to bytes | 待测试的字节大小,支持填写JMeter变量名 | 是 |
Type of Comparison | 比较类型,测试响应大小是否等于、不等于、大于等于、小于等于、大于、小于指定的字节大小 | 是 |
3.5.4. XML断言
XML断言用于测试响应数据是否由正确的XML文档组成,需要注意的是,他不会根据DTD或模式语法校验XML字段内容。
3.5.5. HTML断言
HTML断言使用JTidy检查响应数据的HTML语法是否正确。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
doctype | 文档类型,包含omit(忽略遗留)、auto(自动)、strict(严格)、loose(松散) | 是 |
Format | 响应内容的格式,包含HTML、XHTML、XML | 是 |
Errors only | 是否仅注意错误 | 是 |
Error threshold | 错误阈值,将响应断言为失败之前的最大错误数量 | 是 |
Warning threshold | 警告阈值,将响应断言为失败之前的最大警告数量 | 是 |
Filename | 断言报告的文件名 | 否 |
3.5.6. XPath断言
Xpath断言可用于测试响应体的完整性,可以选择对照DTD进行验证,如果该XPath存在,则断言为真,断言支持布尔表达式。
例:树莓派监控主页面访问成功后,页面左侧包含树莓派本机IP,可使用如下XPath路径表达式进行断言验证。
3.5.7. 比较断言
比较断言可用于比较指定范围内的样本结果,支持比较内容、响应耗时等。
注意:执行测试时不得添加此元件,会消耗大量CPU、内存等系统资源,严重影响测试结果,仅在调试或验证时使用。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Compare Content | 是否比较响应数据中的内容 | 是 |
Compare Time | 如果值>=0,则检查响应时差是否小于该值,等于0时,意味着响应时间必须等于该值,默认为-1,即不比较响应耗时 | 是 |
Comparision Filters | 比较过滤器,用于从内容中比较字符串。 Regex String:通过正则表达式匹配到的字符串 Substitution:预期的字符串内容 |
是 |
3.5.8. JSON断言
JSON断言用于对JSON文档进行验证,断言的内容包含如下:
- 检查数据是否为json格式,如果解析失败,则断言失败;
- 使用
Jayway JsonPath 1.2.0
语法以搜索指定的路径,如果路径查找无结果,则断言失败; - 如果在数据中查找到指定的路径,会根据预期值进行比较验证,如果未找到预期值,则断言失败;
例:系统某接口请求的响应如下所示,若需要断言其中2班的第一个学生的姓名,则JsonPath表达式可填写如下:
$.student[1].class2[0].name
1 | { |
jsonpath表达式匹配测试的结果如下图。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Assert JSON Path exists | 要断言的json元素路径 | 是 |
Additionally assert value | 如果要断言某些值,则勾选 | 否 |
Match as regular expression | 如果要使用正则表达式来匹配,则勾选 | 否 |
Expected Value | 预期值,如果预期值是数组类型,则输入:[] |
否 |
Expect null | 如果预期值为null,则勾选 | 否 |
Invert assertion (will fail if above condition met) |
是否反转断言结果,如果断言结果为成功,则反转结果为失败 | 否 |
3.6. 定时器
3.6.1. 常量定时器
常量定时器可用于业务流程中相邻两个请求有固定等待时间需求的场景,该定时器会应用于所有的线程。
例:在系统登录成功后,默认用户等待5秒后进行点击个人信息
的操作。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Thread Delay | 线程等待的时间,单位为毫秒 | 是 |
3.6.2. 高斯随机定时器
此定时器将每个线程请求暂停随机时间,大多数时间间隔分布在特定值附近,总延迟是高斯分布值(平均0.0和标准偏差1.0)乘以制定的偏差值和偏移值的总和。即:生成的随机数,围绕常数偏移量的变化,呈现高斯曲线分布。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Deviation | 偏差值,单位为毫秒 | 是 |
Constant Delay Offset | 除了随机延迟外的固定延迟时间,单位为毫秒 | 是 |
3.6.3. 均匀随机定时器
此定时器将每个线程请求暂停随机时间,每个时间间隔的发生概率相同,总延迟是随机值和偏移值的总和。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Random Delay Maximum | 随机延迟的最大时间,单位为毫秒 | 是 |
Constant Delay Offset | 除了随机延迟外的固定延迟时间,单位为毫秒 | 是 |
3.7. 预处理器
3.7.1. 用户参数
用户参数预处理器用于指定单个线程的用户变量的值。对于每个线程,变量将按照顺序分配序列中的值,如果线程数大于值得数量,那么这些变量会重复使用。该元件一般配合线程数进行使用。如果有大量变量的需求,建议使用CSV数据集
元件。
例:登录过程中,为每个线程分配一个登录用户。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Update Once Per Iteration | 指示用户参数元素是否每次迭代更新一次 | 是 |
3.7.2. JDBC预处理器
JDBC预处理器在采样器运行之前,执行特定的SQL语句。在JDBC采样器需要某些来自数据库中的数据,并且这些数据无法在初始化线程中计算获取时,会非常有用。
例:在执行测试之前,清除数据库中的垃圾数据。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Variable Name Bound to Pool | JDBC连接配置中的连接池名称 | 是 |
Query Type | SQL语句类型 | 是 |
SQL Query | SQL语句,语句中带参数时,使用? 占位 |
是 |
Parameter values | SQL语句中的参数,JMeter会自动将? 替换成对应的参数值,如有多个,用英文逗号分隔 |
是 |
Parameter types | SQL语句中参数的类型,如有多个,用英文逗号分隔 | 是 |
Variable names | 变量名称,如有多个,用英文逗号分隔,用于保存从数据库返回的数据值列表 | 否 |
Result variable name | 结果变量名称,包含返回数据值的键值变量 | 否 |
Query timeout | 查询超时,单位为秒 | 否 |
Limit ResultSet | 查询最大数据集 | 否 |
Handle ResultSet | 数据集处理方式,包含:存储为字符串、存储为对象、计数等 | 是 |
3.7.3. 采样器超时
如果某个采样器样本完成的时间太长,可使用采样器超时预处理器进行控制,在达到指定的时间后样本仍未完成时,该处理器会使其中断。
超时时间应该合理设置,太长会影响性能结果,太短则可能在正常的测试过程中触发。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Sample Timeout | 采样器超时时间,如果样本完成时间大于它,则会被中断 | 是 |
3.8. 后置处理器
3.8.1. 正则表达式提取器
正则表达式提取器通过使用Perl风格的正则表达式,从一个采样器的响应报文中解析指定的内容,并存储为JMeter变量,在后续有需要的地方进行引用。
例:在系统登录成功后,会生成token值(具备有效期和唯一性)存储在浏览器本地缓存中,后续的查询、创建、提交等操作,均需要携带token字段,否则后台服务器将会认为该请求未被鉴权,需要重新登录鉴权。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Apply to: | 应用范围: Main sample only:仅应用于主采样器 Sub-samples only:仅应用于子采样器 Main sample and sub-sample:应用于两者 Jmeter Variable Name to use:将赋值给变量名 |
是 |
Field to check | 待检查的字段 Body:响应正文,不包含标题 Body(unescaped):响应正文,替换了HTML转义代码(非必要时请勿使用,影响性能) Body as a Document:转换为文本的响应正文(非必要时请勿使用,影响性能) Request Headers:请求头 Response Headers:响应头 URL:请求的URL地址 Response Code:响应状态码 Response Message:响应信息 |
是 |
Name of created variable | 用于存储匹配结果的变量名称 | 是 |
Regular Expression | 正则表达式 | 是 |
Template | 用于引用正则表达式中的组,$1$ 表示第1组,$0$ 表示整个表达式匹配的任何内容 |
是 |
Match No.(0 for Random) | 匹配序号,0代表随机,正数n代表第n个匹配项 | 是 |
Default Value | 默认值,当正则表达式未匹配到结果时,使用该默认值 | 否,但建议填写 |
Use empty default value | 使用空的默认值,当被选中时,Default Value 字段被清除,正则表达式未匹配到结果的情况下,将使用空字符串代替结果 |
否 |
3.8.2. XPath2提取器
XPath2提取器通过XPath查询表达式,从结构化响应XML/(X)HTML中提取指定的内容。
例:系统登录完成后,主页面右上角展示登录用户名的名称,通过以下XPath表达式进行内容提取。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Apply to: | 应用范围: Main sample only:仅应用于主采样器 Sub-samples only:仅应用于子采样器 Main sample and sub-sample:应用于两者 Jmeter Variable Name to use:将赋值给变量名 |
是 |
Name of created variable | 用于存储匹配结果的变量名称 | 是 |
XPath Query | XPath查询表达式 | 是 |
Match No.(0 for Random) | 匹配序号,0代表随机,正数n代表第n个匹配项 | 否 |
Default Value | 默认值,当正则表达式未匹配到结果时,使用该默认值 | 是 |
Namespaces aliases list | 命名空间列表 | 否 |
Return entire XPath fragment instead of text content? | 是否返回整个XPath片段而不是文本内容 | 是 |
3.8.3. JSON提取器
JSON提取器能够从基于JSON-Path
语法的响应报文中提取指定的数据,此后置处理器与正则表达式提取器
很类似,可以非常方便的提取文本内容
该提取器必须作为HTTP采样器或其它具有响应的采样器的子级
例:系统登录成功后,返回json格式的响应报文,报文中包含token字段,使用如下json表达式提取token字段对应的值。
属性 | 描述 | 是否必填 |
---|---|---|
Name | 用于组件树页面展示的名称 | 否 |
Names of created varables | 用于存储匹配结果的变量名称 | 是 |
JSON Path Expressions | JSON路径表达式 | 是 |
Default Values | 默认值,当表达式未匹配到结果时,使用该默认值 | 否 |
Match No.(0 for Random) | 匹配序号,0代表随机,正数n代表第n个匹配项 | 否 |
Compute concatenation var | 匹配结果是否串联。如果选中,则JMeter以, 作为分隔符,将匹配到的所有结果串联起来,并存储到以<variable_name>_ALL 变量中 |
否 |
4. 第三方插件安装
当JMeter自带的配置元件已经无法满足测试需求时,可通过JMeter插件官网,扩展安装更多的第三方插件,甚至可以参考jmeter_tutorial.pdf
指导文件,自己开发所需要的插件。
访问JMeter插件官网,下载
JMeter plugin Manager
插件,并将其拷贝到jmeter_home/lib/ext目录下,插件的安装和管理都离不开它。1
https://jmeter-plugins.org/wiki/PluginsManager/
如果是互联网环境,那么可以启动JMeter后,点击右上角的插件管理器,直接在线查找、安装。卸载插件。
如果是离线环境,那么可以访问JMeter插件官网,查找并下载所需要的插件
jar
包后,同样将其拷贝到jmeter_home/lib/ext目录下,重启JMeter即可使用。1
https://jmeter-plugins.org/wiki/catalogue/
性能测试工具JMeter合集
【Performance】01. 性能测试技术初探篇之性能测试介绍
【Performance】02. 性能测试技术初探篇之常用性能测试工具
【Performance】03. 性能测试技术初探篇之 JMeter 工具使用
【Performance】04. 性能测试技术磨合篇之性能测试场景设计
【Performance】05. 性能测试技术磨合篇之脚本录制和调试
【Performance】06. 性能测试技术磨合篇之脚本执行和结果分析
【Performance】07. 性能测试技术历练篇之性能监控工具
【Performance】08. 性能测试技术历练篇之性能分析神器 JProfile
【Performance】09. 性能测试技术历练篇之 Java 诊断工具 Arthas