JMeter的常见用法

目录

JMeter简介

JMeter的下载及配置(Windows下)

中文配置

结果树中文乱码配置

Jmeter界面介绍

测试计划

配置元件

监听器

定时器

前置处理器

后置处理器

断言

线程(用户)

取样器

逻辑控制器

使用JMeter进行简易测试

JMeter参数化

全局变量

用户参数

CSV

Counter函数

断言

响应断言​编辑

JSON断言

断言持续时间

关联

正则表达式

XPath提取器

JSON提取器

属性

连接数据库-JDBC-Mysql

逻辑控制器

IF控制器


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进行简易测试

  1. 创建线程组

  2. 创建HTTP请求

  3. 查看结果树

此处对百度网站进行请求,注意此处的请求路径等要一致,(包括wd="属性"),与服务器接口有关

JMeter参数化

定义:使用不同的测试数据,调用相同的测试方法进行测试本质:实现测试数据与测试方法的分离实现方式:

  • 全局变量 - 用户定义变量

  • 用户参数 - 为每个用户分配不同的参数值

  • CSV - 文件方式参数化

  • counter函数 - 随机数据

  • 数据库 (暂不作演示)

全局变量

定义通用的变量用于获取 ${变量名}

  1. 添加线程组

  2. 添加用户自定义变量 (添加->配置元件->用户定义的变量)

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

  4. 查看结果树

用户参数

针对同一组参数,当不同的用户来访问时,可以获取到不同的值

  1. 添加线程组,设置线程数为n (等于模拟的用户数)

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

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

  4. 查看结果树

CSV

当不同的用户,或者同一个用户多次循环时,都需要获取到不同的值

  1. 添加线程组

  2. 创建CSV数据文件

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

  4. 添加HTTP请求 ${}

  5. 查看结果树

Counter函数

自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,并且不需要提前定义

  1. 添加线程组

  2. 使用函数助手生成__counter函数 工具->函数助手对话框(Ctrl-Shift+F) 或者右边第二个小图标

     

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

  4. 查看结果树

四种参数化方式的对比:

断言

使程序自动判断预期结果和实际结果是否一致,JMeter在请求的返回层面有自动判断机制(响应状态码),但是请求成功不代表结果正确,需要进一步提高精确度

常用断言:

  • 响应断言

  • JSON断言

  • 持续时间断言

响应断言

  1. 添加线程组

  2. 添加HTTP请求

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

  4. 查看结果树

注意:如果有多个断言,只有要一个不符合,仍会爆红

JSON断言

为了方便测试,下面的测试均使用http://117.72.90.82:8080/ 地址进行,该项目是一个简易的前后端分离项目,用户登录采用Jwt实现,进一步了解可通过访问该地址对应80查看。

对HTTP请求的响应结果为JSON格式时,可以使用JSON断言提高效率

  1. 添加线程组

  2. 添加HTTP请求

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

  4. 添加JSON断言 (添加->断言->JSON断言)

    • 填写Assert JSON Path exists (实际结果-json路径)

    • 勾选Additionally assert value

    • 填写Expected Value (期望结果)

  5. 查看结果树

断言持续时间

用于检查HTTP请求的响应时间是否超出要求范围

  1. 添加线程组

  2. 添加HTTP请求

  3. 添加断言持续时间 (添加 ->断言-> 断言持续时间)

  4. 查看结果树

关联

当请求之间有依赖关系,一个请求的入参是另一个请求的传参时,需要用到关联处理

常用关联方法:

  • 正则表达式提取器

  • XPath提取器

  • JSON提取器

  • 属性

正则表达式

是一个公式,或者说一套规则,使用这套规则可以从任意字符串中提取出对应内容

公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
.:是通配符,可以代表任意字符(除换行回车)
*: 代表前面的字符出现0次或者多次
.*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找
左边界和右边界
公式格式:左边界(.*?)右边界
<title>百度一下,你就知道</title><title>百度一下,你就知道</title>
<title>(.*?)</title>
  1. 任意格式的响应数据,都可以使用正则表达式提取器进行提取

  2. 添加线程组

  3. 添加HTTP请求-被依赖

  4. 添加正则表达式提取器 (添加 ->后置处理器->正则表达式处理器)

    • 引用名称:存放提取出的值的参数名称

    • 正则表达式:做编辑(.*?)右边界

    • 模板:用$$引用,表示解析出第几个()值

    • 匹配数字: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"}}

  5. 添加HTTP请求

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

  7. 添加查看结果树

若无此token,会返回以下结果:

XPath提取器

针对HTML格式的响应结果数据进行提取

  1. 添加线程组

  2. 添加HTTP请求-被依赖

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

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

  5. 添加HTTP请求

  6. 查看结果树

XPath可以通过浏览器得到,F12打开开发者工具,然后在elements页面中右键对应元素的标签,Copy中的两个Xpath均可以使用

JSON提取器

针对JSON格式的响应结果数据进行提取

  1. 添加线程组

  2. 添加HTTP请求-依赖

  3. 添加JSON提取器

  4. 添加HTTP请求

  5. 查看结果树

属性

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

  1. 添加两个线程组,存在依赖关系

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

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

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

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

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

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

  7. 查看结果树

连接数据库-JDBC-Mysql

  • 添加Mysql的驱动包到JMeter中cw 方式一:在测试计划面板点击"浏览.."按钮,将你的JDBC驱动添加进来方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter

  • 配置数据库信息 (添加->配置元件->JDBC Connection Configuration)

  • 添加JDBC请求

  • 查看结果树

逻辑控制器

IF控制器

用来控制它下面的测试元素是否运行

  1. 添加线程组

  2. 添加用户自定义变量

  3. 添加IF控制器,判断 ${status}是否等于 false不勾选Interpret Condition(解释条件),if中填写 "${status}"=="false"

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

  4. 添加JDBC请求及配置(见上方)

  5. 查看结果树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值