目录
JMeter简介
JMeter是Apache组织开发的基于Java的开源软件,用于对系统做功能测试和性能测试。
JMeter的下载及配置(Windows下)
官网:Apache JMeter - Apache JMeter™/进入官网之后,点击左侧Download Releases

之后点击对应版本即可下载,下载速度可能较慢(大小90m左右)

下载之后将压缩包解压,进入bin目录,即可通过运行jmeter.bat文件启动

中文配置
可通过菜单栏 选项->选择语言设置中文,但这种程序重启会重置,因此我们采用修改配置文件的方式
找到bin目录下的jmeter.properties文件,添加以下内容
language=zh_CN

结果树中文乱码配置
找到bin目录下的jmeter.properties文件,添加以下内容 也可以找到文件中的相应位置,取消注释即可
sampleresult.default.encoding=UTF-8

Jmeter界面介绍

最上方菜单栏比较简单,不过多描述可以在菜单栏中修改外观(默认为白色)

测试计划
该界面用于设置一些配置项,设置全局属性,如编码、运行参数等 ,不过多解释

我们右键点击测试计划可以发现,有很多的功能,本文将选择其中一些比较常用的的进行解释

配置元件
用于设置测试的各种参数和配置,初始化测试数据

以下部分比较常用:
-
HTTP 信息头管理器(HTTP Header Manager):用于设置 HTTP 请求的头部信息。
-
CSV 数据文件设置(CSV Data Set Config):可以从 CSV 文件中读取数据,用于参数化测试。
-
用户定义的变量(User Defined Variables):定义全局变量,可在测试中使用。
监听器
可在控制台查看脚本运行的结果,用于收集和展示

以下部分比较常用:
-
查看结果树(View Results Tree):可以查看每个请求的详细信息,包括请求和响应数据、时间等。
-
聚合报告(Aggregate Report):提供关于测试执行的汇总信息,如平均响应时间、吞吐量等。
-
图形结果(Graph Results):以图形的方式展示测试结果,如响应时间随时间的变化趋势。
定时器
用于模拟用户思考时间或在请求之间设置延迟。

以下部分比较常用:
-
固定定时器(Constant Timer):在每个请求之间添加固定的延迟时间。
-
高斯随机定时器(Gaussian Random Timer):在请求之间添加随机的延迟时间,延迟时间呈高斯分布。
前置处理器
对请求参数化进行赋值,用于修改请求参数,准备测试数据和设置环境变量,会在所属的取样器之前执行

以下部分比较常用:
-
用户参数(User Parameters):允许为不同的用户设置不同的参数值,可以实现参数化测试,模拟不同用户的行为。
-
HTTP URL 重写修饰符(HTTP URL Rewriting Modifier):用于修改 HTTP 请求的 URL,例如添加动态参数或重写部分路径。
-
JDBC 前置处理器(JDBC PreProcessor):可以在执行 JDBC 请求之前执行一些 SQL 语句,如设置变量或准备数据。
后置处理器
提取响应中特定字段的值,用于从服务器响应中提取数据,方便后续测试使用或对结果进行验证。会在所属的取样器运行之后执行

以下部分比较常用:
-
正则表达式提取器(Regular Expression Extractor):从响应中提取特定的文本内容,使用正则表达式进行匹配,并将提取的值保存为变量。可用于获取动态数据,如会话 ID、令牌等,以便在后续的请求中使用。
-
JSON 提取器(JSON Extractor):专门用于从 JSON 格式的响应中提取数据。可以提取特定的字段值,并保存为变量供后续使用。
-
边界提取器(Boundary Extractor):从响应中提取特定的边界之间的内容。例如,可以提取 HTML 页面中的一段特定文本。
断言
对提取出来的值与预期结果进行对比,用于验证服务器响应是否符合预期

以下部分比较常用:
-
响应断言(Response Assertion):可以检查响应内容是否包含特定的字符串、是否匹配正则表达式等。
-
大小断言(Size Assertion):检查响应数据的大小是否在指定范围内。
线程(用户)
线程组用于模拟用户行为,按组划分,控制JMeter执行测试

-
SetUp线程组:预测试操作,在所有脚本之前执行
-
普通线程组:执行测试用力,可以有一个或者多个(并行/串行)
-
TearDown线程组:测试后操作,所有脚本之前执行

通过具体的页面可以发现,setUP线程组和TearDown线程组相同,与普通线程组有区别。开放模型线程组的差异较大。

本文主要介绍线程组,下面是一些参数的配置


通过对比线程右键功能列表和测试计划功能列表可以发现,两者存在相同的功能。下面对取样器和逻辑控制器进行简要说明
取样器
用于向服务器发送请求
以下部分比较常用:
-
HTTP 请求(HTTP Request):发送 HTTP 或 HTTPS 请求,可用于测试 Web 应用程序。可以设置请求方法(GET、POST 等)、URL、参数等。
-
JDBC 请求(JDBC Request):用于对数据库进行操作,执行 SQL 查询、插入、更新等操作。
-
FTP 请求(FTP Request):用于与 FTP 服务器进行交互,上传、下载文件等。
逻辑控制器
用于控制取样器的执行逻辑。
以下部分比较常用:
-
循环控制器(Loop Controller):可以指定其子节点(取样器等)的循环执行次数。
-
仅一次控制器(Once Only Controller):确保其子节点在测试执行期间只执行一次。
-
随机控制器(Random Controller):随机执行其子节点中的取样器。
使用JMeter进行简易测试
-
创建线程组
-
创建HTTP请求

-
查看结果树

此处对百度网站进行请求,注意此处的请求路径等要一致,(包括wd="属性"),与服务器接口有关
JMeter参数化
定义:使用不同的测试数据,调用相同的测试方法进行测试本质:实现测试数据与测试方法的分离实现方式:
-
全局变量 - 用户定义变量
-
用户参数 - 为每个用户分配不同的参数值
-
CSV - 文件方式参数化
-
counter函数 - 随机数据
-
数据库 (暂不作演示)
全局变量
定义通用的变量用于获取 ${变量名}
-
添加线程组
-
添加用户自定义变量 (添加->配置元件->用户定义的变量)

-
添加Http请求 ,引用定义的变量名 ${变量名}

-
查看结果树

用户参数
针对同一组参数,当不同的用户来访问时,可以获取到不同的值
-
添加线程组,设置线程数为n (等于模拟的用户数)

-
添加用户参数 (添加->前置处理器->用户参数)

-
添加HTTP请求,引用定义的变量名 ${变量名}

-
查看结果树

CSV
当不同的用户,或者同一个用户多次循环时,都需要获取到不同的值
-
添加线程组

-
创建CSV数据文件

-
添加CSV数据文件设置 (添加->配置元件->CSV Data Set Config)

-
添加HTTP请求 ${}

-
查看结果树

Counter函数
自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,并且不需要提前定义
-
添加线程组
-
使用函数助手生成__counter函数 工具->函数助手对话框(Ctrl-Shift+F) 或者右边第二个小图标

-
添加HTTP请求,使用counter函数 ${counter(False,wd)}

-
查看结果树

四种参数化方式的对比:
断言
使程序自动判断预期结果和实际结果是否一致,JMeter在请求的返回层面有自动判断机制(响应状态码),但是请求成功不代表结果正确,需要进一步提高精确度
常用断言:
-
响应断言
-
JSON断言
-
持续时间断言
响应断言


-
添加线程组
-
添加HTTP请求

-
添加响应断言 (添加->断言->响应断言)

-
查看结果树

注意:如果有多个断言,只有要一个不符合,仍会爆红
JSON断言
为了方便测试,下面的测试均使用http://117.72.90.82:8080/ 地址进行,该项目是一个简易的前后端分离项目,用户登录采用Jwt实现,进一步了解可通过访问该地址对应80查看。
对HTTP请求的响应结果为JSON格式时,可以使用JSON断言提高效率
-
添加线程组
-
添加HTTP请求

-
添加HTTP信息头管理器(此处需要这个,使发送的请求为JSON格式)

-
添加JSON断言 (添加->断言->JSON断言)
-
填写Assert JSON Path exists (实际结果-json路径)
-
勾选Additionally assert value
-
填写Expected Value (期望结果)

-
-
查看结果树

断言持续时间
用于检查HTTP请求的响应时间是否超出要求范围
-
添加线程组
-
添加HTTP请求
-
添加断言持续时间 (添加 ->断言-> 断言持续时间)

-
查看结果树

关联
当请求之间有依赖关系,一个请求的入参是另一个请求的传参时,需要用到关联处理
常用关联方法:
-
正则表达式提取器
-
XPath提取器
-
JSON提取器
-
属性
正则表达式
是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取出对应内容
公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容 .:是通配符,可以代表任意字符(除换行回车) *: 代表前面的字符出现0次或者多次 .*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来 ?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找 左边界和右边界 公式格式:左边界(.*?)右边界 <title>百度一下,你就知道</title><title>百度一下,你就知道</title> <title>(.*?)</title>
-
任意格式的响应数据,都可以使用正则表达式提取器进行提取
-
添加线程组
-
添加HTTP请求-被依赖

-
添加正则表达式提取器 (添加 ->后置处理器->正则表达式处理器)
-
引用名称:存放提取出的值的参数名称
-
正则表达式:做编辑(.*?)右边界
-
模板:用$$引用,表示解析出第几个()值
-
匹配数字:1表示第一个值 -1代表所有取值

为了方便理解正则表达式的值,下面是接口返回数据: {"code":1,"msg":"success","data":{"id":1,"title":"这是一个描述 1","userId":1,"url":"https://www.bilibili.com/","image":"http://117.72.90.82:19205/2becb2aa-698f-48ba-9084-19e19cd81ee7.jpg","description":"这是一个描述 1","typeId":1,"status":0,"createTime":"2023-09-15T10:00:00","updateTime":"2023-09-15T10:00:00"}}
-
-
添加HTTP请求

-
添加HTTP信息头管理器 (需要将token放到请求头中,保证能够正常请求)

-
添加查看结果树

若无此token,会返回以下结果:
XPath提取器
针对HTML格式的响应结果数据进行提取
-
添加线程组
-
添加HTTP请求-被依赖

-
添加XPath提取器 (添加->后置处理器->XPath提取器)

-
添加HTTP信息头管理器 引用正则表达式中的名称 ,${}

-
添加HTTP请求
-
查看结果树

XPath可以通过浏览器得到,F12打开开发者工具,然后在elements页面中右键对应元素的标签,Copy中的两个Xpath均可以使用
![]()
JSON提取器
针对JSON格式的响应结果数据进行提取
-
添加线程组
-
添加HTTP请求-依赖

-
添加JSON提取器

-
添加HTTP请求

-
查看结果树

属性
当有关联关系的两个请求在两个线程组中时,可通过JMeter中的属性进行关联
-
添加两个线程组,存在依赖关系

-
添加HTTP请求,存在依赖关系

-
创建正则表达式提取器(其它均可,能以参数形式获取)

-
使用函数助手,结合正则表达式的配置,生成setProperty函数

-
创建BeanShell取样器,添加刚才创建的函数

-
创建HTTP信息头管理器被依赖:

根据函数助手生成对应函数,添加到另一个HTTP信息头中

-
查看结果树

连接数据库-JDBC-Mysql

-
添加Mysql的驱动包到JMeter中cw 方式一:在测试计划面板点击"浏览.."按钮,将你的JDBC驱动添加进来方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter
-
配置数据库信息 (添加->配置元件->JDBC Connection Configuration)

-
添加JDBC请求

-
查看结果树

逻辑控制器
IF控制器
用来控制它下面的测试元素是否运行
-
添加线程组
-
添加用户自定义变量
-
添加IF控制器,判断 ${status}是否等于 false不勾选Interpret Condition(解释条件),if中填写 "${status}"=="false"

勾选Interpret Condition ,通过函数助手生成

-
添加JDBC请求及配置(见上方)
-
查看结果树





598

被折叠的 条评论
为什么被折叠?



