JMeter的使用——傻瓜式学习【中】

news2024/11/16 3:31:29

目录

前言

1、JMeter参数化

1.1、什么是参数化

1.2、用户定义的变量

1.2.1、什么时候使用用户定义的变量

1.2.2、使用“用户定义的变量”进行参数化的步骤:

1.2.3、案例

1.3、用户参数

1.3.1、什么时候使用用户参数?

1.3.2、使用“用户参数”进行参数化的步骤:

1.3.3、案例

1.4、CSV数据文件设置

1.4.1、什么时候使用CSV数据文件设置

1.4.2、使用“CSV数据文件设置”进行参数化的步骤?

1.4.3、案例

1.5、函数——随机数据

1.5.1、使用场景

1.5.2、使用“counter函数”进程参数化的步骤:

1.5.3、案例

1.6、4种参数化方式对比

2、JMeter断言

2.1、响应断言

2.2.1、参数认识:

2.1.2、案例: 

2.2、JSON断言

2.2.1、参数认识:

2.2.2、案例:

2.3、持续时间断言

2.3.1、参数说明

2.3.2、案例:

3、JMeter关联

3.1、正则表达式提取器

3.1.1、介绍正则表达式

案例使用一:

案例二:

3.1.2、正则表达式提取器

案例:

3.2、Xpath提取器

案例:

3.3、JSON提取器

案例:


前言

        小白同学,可以先看这篇哦:http://t.csdnimg.cn/geQnl


1、JMeter参数化

1.1、什么是参数化

        定义:使用不同的测试数据,调用相同的测试方法进行测试

        本质:实现测试数据与测试方法的分离

        实现方式举例:

  • 用户定义的变量——全局变量【JMeter有】
  • 用户参数——为每个用户分配不同的参数值【Jmeter有】
  • CSV数据文件设置——文件方式参数化【Jmeter有】
  • 函数——随机数据【JMeter有】
  • 数据库

下面我们来看看JMeter中的几种参数化:

1.2、用户定义的变量

1.2.1、什么时候使用用户定义的变量

        定义全局变量

1.2.2、使用“用户定义的变量”进行参数化的步骤:

  1. 添加线程组
  2. 添加用户定义的变量。格式为变量名 - 变量值
  3. 添加http请求,引用定义的变量名。格式:${变量名}
  4. 添加察看结果树

1.2.3、案例

步骤一:添加线程组

步骤二:添加用户定义的变量

步骤三:添加http请求

http中可以这样填: 

也可以这样填:

步骤四:添加察看结果树

查看运行结果:

1.3、用户参数

1.3.1、什么时候使用用户参数?

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

1.3.2、使用“用户参数”进行参数化的步骤:

  1. 添加线程组,设置线程数为n(模拟的用户数)
  2. 添加用户参数:第一列添加多个变量名;后续每一列为一组用户数据【看案例】
  3. 添加http请求,引用定义的变量名。格式:${变量名}
  4. 添加查看结果树

1.3.3、案例

步骤一:添加线程组

和上面一样,记得设置线程数,例:2

步骤二:添加用户参数

步骤三:添加http请求

同第一个案例

步骤四:添加察看结果树

同第一个案例

查看运行结果:

 

1.4、CSV数据文件设置

1.4.1、什么时候使用CSV数据文件设置

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

1.4.2、使用“CSV数据文件设置”进行参数化的步骤?

  1. 定义CSV数据文件
  2. 添加线程组
  3. 添加CSV数据文件设置
  4. 添加http请求,引用定义的变量名。格式${变量名}
  5. 添加查看结果树

1.4.3、案例

步骤一:定义CSV数据文件

 

步骤二:添加线程组

同案例1,设置循环次数,例:2

步骤三:添加CSV数据文件设置

 

步骤四:添加http请求

步骤五:添加察看结果树

同案例1 

查看运行结果:

1.5、函数——随机数据

1.5.1、使用场景

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

1.5.2、使用“counter函数”进程参数化的步骤:

  1. 添加线程组,设置虚拟用户数和循环次数
  2. 生成_counter函数
  3. 添加http请求,使用_counter函数。格式:${_counter(FALSE,)}
  4. 添加察看结果树

1.5.3、案例

步骤一:添加线程组

同上,设置线程数2,循环次数2

步骤二:生成_counter函数

参数:

  • 第一个参数

    • True,每个用户(线程)的计数器保持独立,每个用户(线程)计数从1开始计数。
    • False,全局计数器,所以用户(线程)统一从1开始计数。
  • 第二个参数

    • 将计数器函数生成的值赋值给新变量。比如,新变量名称为number,后续可以通过参数化方式${number}引用计数器的值。

步骤三:添加http请求

步骤四:添加察看结果树

同上

查看运行结果:

1.6、4种参数化方式对比

  • 用户定义的变量:作用:定义全局变量;局限性:每次取值(无论是否相同的用户)都是固定值
  • 用户参数:作用:保证不同的用户针对同一组参数,可以取到不同的值;局限性:同一个用户在多次循环中,取到相同的值
  • CSV数据文件设置:作用:保证不同的用户及同一用户多次循环时,都可以取到不同的值;局限性:需要手动进行设置测试数据
  • 函数:作用:保证不同的用户多次循环时,都可以取到不同的值,不需要提前设置;局限性:输入数据有特定的业务要求时无法使用

2、JMeter断言

        断言就是让程序判断预期结果与实际结果是否一致

JMeter中常用的断言:

  1. 响应断言
  2. JSON断言
  3. 持续时间断言

2.1、响应断言

2.2.1、参数认识:

各个参数说明:

1:

  • 响应文本:来自服务器的响应文本,即主体
  • 响应代码:响应的状态码,例如200
  • 响应信息: 响应的信息,例如OK
  • response headers:相应头部
  • request Headers:请求头部
  • request Data:请求数据
  • URL样本:请求的URL
  • Document(text):响应的整个文档
  • Ignore Status:忽略返回的响应状态码

2:

  • 包括:文本包含指定的正则表达式(正则表达式后面会简单介绍一下,现在就理解为包含一个字符串就可以了)
  • 匹配:整个文本匹配指定的正则表达式
  •  Equals:整个返回结果的文本等于指定的字符串(区分大小写)
  • Substring:返回结果的文本包含指定字符串(区分大小写)
  • 否:取反。就是指符合刚才的断言即为错,不符合为对
  • 或者:多个测试模式,有一个满足即为通过。默认是且,所有通过才为通过

2.1.2、案例: 

断言:

添加一个断言结果:

http请求:

运行后,查看结果:

2.2、JSON断言

2.2.1、参数认识:

参数说明:

  • Assert JSON Path exists:用于断言的JSON元素的路径(实际结果)
  • Additionally assert value:如果您想要用某个值生成断言,请选择复选框 
  • Match as regular expression:使用正则表达式断言
  • Expected Value:期望值
  • Expect null:希望为空,则勾选复选框
  • Invert assertion(will fail if above conditions met):反转断言(如果满足上述条件则失败)

2.2.2、案例:

http请求:

JSON断言:

上述的JSON的路径,就是这个值在json格式下对应的位置,$.data.gender对应如下:

运行后,看断言:

 

2.3、持续时间断言

就是用来检查http请求的响应时间是否超出要求范围

2.3.1、参数说明

参数:

  • 持续时间(毫秒):请求允许的最大响应时间,超过则认为失败~

2.3.2、案例:

断言:

http请求同上一个案例相同~

运行,查看断言结果:


3、JMeter关联

        关联:当请求之间有依赖关系,比如一个请求的入参是另一个请求的返回数据。这时就需要用到关联处理

JMeter中常用的关联方法:

  • 正则表达式提取器
  • Xpath提取器
  • JSON提取器

3.1、正则表达式提取器

3.1.1、介绍正则表达式

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

最终使用: 

                公式格式:左边界(.*?)右边界

案例使用一:

我们结合现在网站,来验证一下: 正则表达式在线测试 | 菜鸟工具

 内容:<title>百度一下,你就知道</title><title>百度一下,你就知道</title>

提取目标:<title>百度一下,你就知道</title>

正则表达式:套公式:左边界<title>,右边界:</title>

结果:

和我们预想的不太一样,预想的是:<title>百度一下,你就知道</title>

所以我们要加一个问号,表示非贪婪匹配:

这里是找到了两处,我们可以自己决定要哪一个~

案例二:

内容:

021-1234-1234
022-1234-1235
023-1234-1236
024-1234-1237
025-1234-1238
026-1234-1239
027-1234-1230

预计匹配:所有的号码

表达式错误示范:

正确匹配:

注:

  • 通过一个正则表达式可以提取出多组数据,每组数据设置对应的左边界和右边界即可
  • 每一组数据都可以有一个或者多个值 

3.1.2、正则表达式提取器

  1. 作用:任意格式的响应数据,都可以使用正则表达式提取器进行提取
  2. 添加:
  3. 参数说明:
  •  引用名称:存放提取出的值的参数名称,如填写title
  • 正则表达式:左边界(*?)右边界
  • 模板:用SS引用起来,表示解析出第几个()的值
  • 匹配数字: 1表示第1个值,-1表示所有取值,0表示随机
  • 缺省值:默认值。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。
案例:

请求1:

正则表达式提取器:

请求2:

运行,查看结果树:

 这里的值为空,怎么办?

我们可以添加一个

 调试取样器,不用对里面的值更改,添加了就行:

添加一个查看结果树,运行,看结果:

我们可以看到gender变量确实为空,但下面的变量有值呀,所以我们修改请求2:

重新运行,查看:

3.2、Xpath提取器

  1. 作用:针对html格式的响应结果数据进行提取
  2. 添加位置:
  3. 参数说明:
  • Use Tidy(tolerant parser):当需要处理的页面是html格式时,需要勾选该选项;当需要处理的页面是XML或XHTML格式时,取消选中该选项
  • Quiet表示只显示需要的HTML页面
  • Report errors表示显示响应报错
  • Show warnings表示显示警告
  • Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨;
    Validate XML:根据页面元素模式进行检查解析
  • Ignore Whitespace:忽略空白内容
  • Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容(一些XML元素具有属性,属性包含应用程序使用的信息,属性仅在程序对元素进行读、写操作时,提供元素的额外信息,这时候需要在DTDs中声明)
  • Return entire XPath fragment of text content:返回文本内容的整个XPath片段;
  • 引用名称:存放提取出的值的参数名称
  • Xpath Query:用户提取值的xpath表达式【和UI自动化定位元素一样】
  • 匹配数字:如果xpath路径可以查询出许多的结果,则可以选择提取哪个。0表示随机;-1表示所有;1表示第一个值
  • 缺省值:参数的默认值。可以不填写。通常用于后续的逻辑判断,建议使用一些特殊含义的,比如0,NULL,ERROR等。
案例:

请求1:

Xpath提取器:

http请求2:

添加一个调试取样器,不用对里面的值更改,添加了就行:

添加一个查看结果树,运行,看结果:

3.3、JSON提取器

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

添加位置:

参数介绍:

  • Names of create variables:存放提取出的值的参数名称
  • JSON Path Expression:JSON路径表达式
  • Match No:如果JSON路径匹配出许多结果,则可以选择提取哪个:0表示随机;-1表示所有;1表示第一个值
  • Default Value:参数的默认值
案例:

请求1:

JSON提取器:

请求2:

运行结果:

好啦,先到这里咯~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

交叉编译工具链(以STM32MP1为例)

1.什么是交叉编译工具链&#xff1f; 在一个系统上进行编译&#xff0c;在另一个系统上进行执行 2.STM32MP1交叉编译工具链 3.交叉编译器内容 4.两种工具链模式 5.两种链接模式 6.工具使用 注意&#xff1a;OpenSTLinux已经提供了编译框架&#xff0c;不需要命令行手工编译 …

Spring Cloud 实战 | 解密Feign底层原理,包含实战源码

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

在VM虚拟机上安装centos并了解Linux常用命令

一. centos安装 新建一个虚拟机&#xff0c;使用ISO映像文件&#xff08;在浏览器上直接搜索阿里云镜像站&#xff0c;下载合适的镜像文件&#xff09; 安装后设置密码然后重启 重启后输入账号和密码 查看IP 输入命令&#xff1a; vi ifcfg-ens33&#xff0c;进入编辑界面&a…

物联网AI MicroPython传感器学习 之 PAJ7620手势识别传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 手势识别传感器PAJ7620u2是一款集成3D手势识别和运动跟踪为一体的交互式传感器&#xff0c;传感器可以在有效范围内识别手指的顺时针/逆时针转动方向和手指的运动方向等。它可以识别13种手势&a…

STM32的RTC模块的难点推导

在 S T M 32 STM32 STM32的 R e a l t i m e c l o c k , R T C Real\quad time\quad clock,RTC Realtimeclock,RTC模块中有一些功能点不太好理解&#xff0c;下面我根据我自己对这些功能难点的理解来做一些推导并记录如下。 首先来看一下平滑数字校准。假设我们目前的 R …

万字解析设计模式之原型模式与建造者模式

一、原型模式 1.1概述 原型模式是一种创建型设计模式&#xff0c;其目的是使用已有对象作为原型来创建新的对象。原型模式的核心是克隆&#xff0c;即通过复制已有对象来创建新对象&#xff0c;而不是通过创建新对象的过程中独立地分配和初始化所有需要的资源。这种方式可以节…

CMT2310A一款低功耗高性能Sub-1GHz射频收发器芯片

CMT2310A是一款超低功耗,高性能&#xff0c;适用于各种113至960 MHz无线应用的00K&#xff0c;(G)FSK 和4(G)FSK 射频收发器。它是CMOSTEK NextGenRFTM 射频产品线的一部分&#xff0c;这条产品线包含完整的发射器&#xff0c;接收器和收发器。CMT2310A的高集成度&#xff0c;简…

npm package.json属性详解

npm package.json属性详解 概述 package.json必须是一个严格的json文件&#xff0c;而不仅仅是js里边的一个对象。其中很多属性可以通过npm-config来生成 name package.json中最重要的属性是name和version两个属性&#xff0c;这两个属性是必须要有的&#xff0c;否则模块就…

【机器学习(二) 线性代数基础I(Linear Algebra Foundations)】

机器学习&#xff08;二&#xff09; 线性代数基础I&#xff08;Linear Algebra Foundations) 这一节主要介绍一些线性代数的基础。 目录 机器学习&#xff08;二&#xff09; 线性代数基础I&#xff08;Linear Algebra Foundations)1. 向量 Vectors2. 复杂度 Complexity3.线…

基于3D点云的语义分割模型调研(最新更新2023.10.30)

文章目录 3D点云分割数据集点云模型的评价指标3D点云语义分割方法发展PointSIFT模型的效果 https://blog.csdn.net/toCVer/article/details/126265782 基于深度学习的三维点云分割综述 3D点云分割数据集 传统的点云分割方法包括基于边缘检测的方法、基于区域增长的算法、基于特…

【Linux】:Linux开发工具之Linux编辑器vim的使用

&#x1f52b;1.Linux编辑器-vim使用 &#x1f4e4; vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以…

deepsort算法 卡尔曼滤波 匈牙利算法

目标追踪最核心的两个算法就是卡尔曼滤波和匈牙利算法算法。 卡尔曼滤波&#xff1a;根据当前帧中的轨迹预测下一帧的轨迹。匈牙利算法:将预测的目标位置与检测到的目标位置进行匹配&#xff0c;实现对目标的准确跟踪。Sort算法 Sort算法分为以下几个步骤&#xff1a; 1.卡尔曼…

AS/400-物理文件-02

物理文件 - Physical file Physical file物理文件中的条目级别相关命令 Physical file 简介物理文件 这是一个文件。包含预定义的结构化格式的数据。它是PF类型。通过使用CRTPF命令创建PF。PF中包含的字段的最大数量为8000。最多包含120个关键字段。 PF 的结构如下 TYPE SPECIF…

【C++】多态 ⑥ ( 函数重定义涉及的问题 - 子类覆盖父类函数名 )

文章目录 一、函数重定义涉及的问题1、执行出错的代码2、代码分析3、错误原因分析 - 函数重定义问题 : 子类覆盖父类函数名4、正确调用函数的方法 一、函数重定义涉及的问题 1、执行出错的代码 错误代码示例 : #include "iostream" using namespace std;// 父类 cla…

Openssl数据安全传输平台014:OCCI环境搭建和使用:Centos8-Oracle19c代码跑通 + Window代码没跑通(不影响本项目)

文章目录 0 代码仓库1 启动Centos oracle数据库2 Winsows安装配置OCCI库2.1 下载文件2.2 VS 配置2.2.1 VC包含目录2.2.2 VC库目录2.2.3 连接器-附加依赖项2.2.4 代码测试-Oracle11g2.2.4.1 准备2.2.4.2 代码测试 3 Centos安装配置occi库3.0 强调3.1 下载instantclient库文件压缩…

国产思仪 1765A/B/C/D/E程控直流电源

1765A/B/C/D/E程控直流电源 产品综述 1765系列程控直流电源主要用于储能设备系统的测量分析和自动测试系统的加电测试。作为一种双象限直流电源&#xff0c;将电源输出和功率吸收的功能完全集成到单一系统中&#xff0c;可实现电源与负载功能的无缝转换&#xff0c;解决双向能源…

RT-Thread 内存管理(一)

内存管理 在计算系统中&#xff0c;通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机访问存储器&#xff09;&#xff0c;可以把…

Linux gzip命令:压缩文件或目录

gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令&#xff0c;通过此命令压缩得到的新文件&#xff0c;其扩展名通常标记为“.gz”。 再强调一下&#xff0c;gzip 命令只能用来压缩文件&#xff0c;不能压缩目录&#xff0c;即便指定了目录&#xff0c;也只能压缩目录…

使用WebDav服务远程操作本地服务器?试试群晖NAS【内网穿透】

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选…

Linux 文件系统简介

文章目录 一、磁盘简介1.1 简介1.2 机械硬盘与固态硬盘1.2.1 机械磁盘&#xff08;HDD&#xff09;1.2.2 固态磁盘&#xff08;SSD&#xff09;1.2.3 I/O操作 二、文件系统简介2.1. 简介2.2 文件系统特点2.3 Linux文件系统 三、文件数据存储方式3.1 连续存储3.2 链接表存储3.3 …