当前位置: 首页 > news >正文

Jmeter关联,断言,参数化

目录

一、关联

边界提取器

JSON提取器

正则表达式提取器

跨线程关联

二、断言

响应断言

JSON断言

断言持续时间

三、参数化

用户参数

csv data setconfig

csvread函数


一、关联

常用的关联有三种

1.边界提取器

2.JSON提取器

3.正则表达式提取器

接下来就详细讲述一下这三种的用法

这里提供两个接口方便练习

登录接口

接口名称:登录

接口提交方式:POST

接口的url地址:https://admin-api.macrozheng.com/admin/login

接口入参:

name 类型 是否必填 参数描述

username string 是 用户名

password stirng 是 密码

headers:Content-Type string  application/json

响应的参数:

{"code":200,"message":"操作成功","data":{"tokenHead":"Bearer ","token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImNyZWF0ZWQiOjE3MjY3Mjc3NjM5NTgsImV4cCI6MTcyNzMzMjU2M30.-jcV7TaKsVFfFumm1SkiH6fCtDGWpxkquJ-_LHbpY-XDvmN7o1w7V7HE20p7AjFBCAgeOYMSxUmk84hYL9mpcA"}}

查找接口

 接口名称:用户搜索

接口的提交方式:GET

接口的url地址:https://admin-api.macrozheng.com/admin/list?pageNum=1&pageSize=10&keyword=mac

接口入参:

name 类型 是否必填 参数描述

pageNum int   否 页数

pageSize int   否 每页显示的条数

keyword string           是 关键词

headers: Authorization string Bearer eyJhbGciOiJIUzUxM

·响应数据:

{"code":200,"message":"操作成功","data":{"pageNum":1,"pageSize":10,"totalPage":1,"total":1,"list":[{"id":4,"username":"macro","password":"$2a$10$Bx4jZPR7GhEpIQfefDQtVeS58GfT5n6mxs/b4nLLK65eMFa16topa","icon":"https://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/icon/github_icon_01.png","email":"macro@qq.com","nickName":"macro","note":"macro专用","createTime":"2019-10-06T07:53:51.000+00:00","loginTime":"2020-02-03T06:55:55.000+00:00","status":1}]}}

边界提取器

先对登录进行操作,因为后面的用户搜索我们先对登录进行操作

新建一个线程组

然后添加HTTP请求改名为登录,我们看上面接口信息发现它是有响应头的

headers:Content-Type string   application/json

然后发现它是JSON类型的,JSON类型的我们就需要在消息体数据中写入我们提交的数据

接下来添加HTTP信息头管理器,我们我的头添加到里面

这时候我们可以添加一个查看结果树,来看看能否登录成功

我们能看到登录成功了里面也有我们要的token值(token值是我们下面执行查找接口的时候要用,因为他要先登录才能使用这个接口,不然返回信息中就会有“请先登录”)

然后在登录里面添加一个边界提取器

我们来解释一下这里面的内容(80%的情况下我们都用默认即可)

名称引用:根据自己需要命名即可

Apply to:是对那些起作用,一般都默认对父级起作用

主体:返回的所有内容

Body(unescaped):响应体,不带响应头

Body a Document:响应体单独放在一个外部.TXT文件中

信息头:响应头

Request Headers:请求头

URL:返回的URL地址

响应代码:状态码

响应信息:状态码后面的 "OK"

引用名称:我们随意命名即可,这里命名为token22
左边界:指的是我们要取值的左边的内容

右边界:指的是我们要取值的右边的内容

匹配数字:-1是指所有匹配到的值

                   0是所有匹配到的值中随机选择一个

                   1是第一个值

                   2是第二个指

                   ...........

(注意:如果只有一个值建议用1或者1,-1的话它是把所有值都放到了一个列表中,所以到时候即使你只有一个值,他也会显示两个,一个是token22=NONE,一个是token22_01=我们要的token值,想要用就得再提取一次)

缺省值:如果没有找到值就用一个默认值来替代,这里写null即可

然后我们添加一个调试器,看看结果有没有提取出来,可以看到我们的token22的值提取出来了

接下来创建用户搜索HTTP请求,看到接口信息上依旧是有头信息,我们就添加上一个HTTP头信息管理器

Bearer后面跟的是我们的token值,我们需要把提取的token放他的后面,提取后的使用方法就是

${}  里面写我们定义的名字        ${token22}

接下来就可以运行了,我们添加查看结果树,查看结果,可以看到我们成功关联了并且成功返回信息

(我没有演示用户搜索里面的值,上面的接口文档写了是提交keyword,这里不演示了

JSON提取器

跟边界提取器一样,不过这次新建的的是JSON提取器

其他值都跟边界提取器一样,这里只介绍JSON Path experssions

我们可以看到这里token是在data里面的,所以提取JSON数据时我们要一层一层的提取

所以就写$data.token,或者写$..token也可以

使用方法跟边界提取器一样,不再过多赘述

正则表达式提取器

接下来是正则表达式提取器

添加一个正则表达式提取器

看这里面的东西,其他东西跟上面两个都一样

正则表达式:token里面的值是我们要的,我们就把需要的值用括号代替

 . 代表匹配一个任意字符

+ 表示一次或多次

?表示不要太贪婪,在找到第一个匹配项后停止

*  表示贪婪,找到多个匹配项

一般 (.+?)和(.+*)能够满足我们80%的使用场景

模板:如果有多个表达式,输入几就是代表用第几个表达式这里要第一个就是$1$

使用方法与前两个一样,在头部添加名字即可

我们也可以添加多个正则表达式,用$$选取就行了

三种关联方式差不多就讲完了,不过还有一种夸线程关联

跨线程关联

这里面涉及的东西就优点多了,一点一点说

先添加一个BeanShell后置处理程序

这里面可以写代码,这里写的都是java代码,原因是Jmeter是Java开发的,不会写也没关系,Jmeter也知道我们不悔写,所以提供的有工具 "函数助手"

 我们找到setProperty,写入我们的值

这里的Valur of property填的是我们提取的token值,我命名叫token2042,生成后会有这个函数字符串,我们复制过来直接放进BeanShell后置处理程序中

 然后再需要使用关联值的地方使用

依旧打开函数助手,找到property,填入我们在BeanShell中命名的 user_token,生成后复制出来放到HTTP信息头中

 最后运行,看到我们成功跨线程关联了

二、断言

有时候我们需要断言来判断是否正确,是我们想要返回的信息,我们就添加断言,

这里说三种常用的断言方式

响应断言

JSON断言

断言持续时间

响应断言

右键添加响应断言

我们看到里面的内容测试字段我们依旧默认即可,添加一个文本

意思是如果返回的信息中有 "成功" 两个字就说明我们得到想要的信息了或者测试通过了

我先随便改成两个字,运行展示一下断言失败什么样子的

可以看到断言信息中说没有 “待测二” 这个信息,所以断言没通过

JSON断言

添加一个JSON断言

Assert JSON Path exists这里面写的是我们要断言的信息,比如这里我们要断言JSON返回信息中msg后面的内容,写上 ".$msg" 注意前面有个  "."  少写这个会报错

Expected Value中写我们断言的信息,这里直接模拟断言不通过的情况

执行

他说在msg中没有找到“chenggong”,所以断言失败

断言持续时间

我们可以给一个时间,只要在这个时间内返回了信息说明断言成功,这是来测试接口的性能,就是返回信息的速度,一般行业标准不超过1.5S就可以了

依旧是右键添加,里面填入时间即可,单位是毫秒,这里我写小一点来看失败是什么结果

执行

可以看到直接就说反应时间太长,不应该超过100毫秒

三种常用的断言就这些,一般JSON断言用的最多

三、参数化

当我们有一批数据需要进行测试的时候就用参数化的方法,jmeter也有几种参数化的方法

前置处理器中的用户参数

使用配置元件中csv data setconfig

使用csvread函数实现

用户参数

我们添加一个用户参数

我们首先参数化我们的Value值

在名称中输入我们的Key值(这个可以自己定义一个)在用户里写要定义的值(第一个是登录里面的用户名,第二个是密码)

同样可以参数化我们的Key值,如下

由于我们上面添加了三个用户,我们就来带线程组中设置三个人操作,也就是线程数调成3

最后执行即可

csv data setconfig

添加一个csv data setconfig元件

里面第一个先上传我们的外部数据,可以是.txt和.csv

变量名根据自己需要更改

忽略首行:这个是看你外部数据,如果外部数据里面你写了yhmpwd,ukey,pkey这些值,选True忽略第一行就行,如果你没写就选择False

分隔符写 “,”  

剩下的默认即可

跟上面一样替换掉提交的Key值和Value值执行

csvread函数

还有一种函数可以实现参数化,不过不推荐用,上面两种已经够用了

我们打开函数助手

csv文件列号说的是你这个文件中的哪一列的数据,0就是第一列,我们看到第一列是username,第四列就是3

按照这种方法添加我们去执行就可以了

下一篇讲一下Jmeter常用的一些函数

相关文章:

Jmeter关联,断言,参数化

目录 一、关联 边界提取器 JSON提取器 正则表达式提取器 跨线程关联 二、断言 响应断言 JSON断言 断言持续时间 三、参数化 用户参数 csv data setconfig csvread函数 一、关联 常用的关联有三种 1.边界提取器 2.JSON提取器 3.正则表达式提取器 接下来就详细讲述…...

嵌入式单片机底层原理详解

前言 此笔记面向有C语言基础、学习过数字电路、对单片机有一定了解且尚在学习阶段的群体编写,笔记中会介绍单片机的结构、工作原理,以及一些C语言编程技巧,对于还停留在复制模板、copy代码阶段的读者会有比较大的帮助,待学习完成后可以独立完成几乎所有单片机的驱动开发。 …...

重修设计模式-行为型-责任链模式

重修设计模式-行为型-责任链模式 将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。 责任链模式(Chain of Responsibilit…...

Vercel部署/前端部署

Vercel 部署 今天要讲的是如何对别人向自己的开源仓库提的PR进行自动代码审核 1. 注册并登录Vercel 访问 Vercel官网点击右上角的"Sign Up"选择使用GitHub、GitLab、Bitbucket或邮箱注册完成注册流程并登录 2. 连接代码仓库 在Vercel仪表板,点击"New Proje…...

常见的css预处理器

CSS预处理器是一种扩展了CSS功能的脚本语言,它允许开发者以编程的方式编写更加干净、结构化的CSS代码。通过引入变量、嵌套规则、混合(Mixins)、函数等高级特性,CSS预处理器使得CSS代码的编写更加灵活、高效,同时也提高…...

mysql—半同步模式

mysql的并行复制 在172.25.254.20(slave)主机上 默认情况下slave中使用的是sql单线程回放 在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重 开启MySQL的多线程回放可以解决上述问题 mysql> show processlist; 在配置文件中进行编辑 [root…...

You are not allowed to push code to this project

原因1 用户权限不够。 具体查看用户权限路径: 原因2 vscode之前都能提交代码,但是突然就提交不上了。 表现为:前端代码能拉取,但是不能提交。使用idea进行前端代码的提交,完全没问题。 解决方案:修改TortoiseG…...

Java刷题:最小k个数

目录 题目描述: 思路: 具体实现 整体建立一个大小为N的小根堆 通过大根堆实现 完整代码 力扣链接:面试题 17.14. 最小K个数 - 力扣(LeetCode) 题目描述: 设计一个算法,找出数组中最小的…...

Redis实战--Redis应用过程中出现的热门问题及其解决方案

Redis作为一种高性能的key-value数据库,广泛应用于缓存、消息队列、排行榜等场景。然而,在实际应用中,随着业务规模的不断扩大和访问量的持续增长,缓存系统也面临着诸多挑战,其中最为典型的便是缓存穿透、缓存击穿和缓…...

实时数字人DH_live使用案例

参看: https://github.com/kleinlee/DH_live ubuntu 测试 apt install ffmpeg 下载安装: git clone https://github.com/kleinlee/DH_live.git cd DH_liveconda create -n dh_live python=3.12 conda activate dh_live pip install -r requirements.txt pip install torch -…...

线上环境排故思路与方法GC优化策略

前言 这是针对于我之前[博客]的一次整理,因为公司需要一些技术文档的定期整理与分享,我就整理了一下。(https://blog.csdn.net/TT_4419/article/details/141997617?spm1001.2014.3001.5501) 其实,nginx配置 服务故障转移与自动恢复也是可以…...

硬件设计很简单?合宙低功耗4G模组Air780E—开机启动及外围电路设计

Air780E是合宙低功耗4G-Cat.1模组经典型号之一,上期我们解答了大家关心的系列问题,并讲解了选型的注意要点。 有朋友问:能不能讲些硬件设计相关的内容? 模组的上电开机,是硬件设计调试的第一步。 本期特别分享——Ai…...

初试AngularJS前端框架

文章目录 一、框架概述二、实例演示(一)创建网页(二)编写代码(三)浏览网页(四)运行结果 三、实战小结 一、框架概述 AngularJS 是一个由 Google 维护的开源前端 JavaScript 框架&am…...

【学习笔记】手写 Tomcat 六

目录 一、线程池 1. 构建线程池的类 2. 创建任务 3. 执行任务 测试 二、URL编码 解决方案 测试 三、如何接收客户端发送的全部信息 解决方案 测试 四、作业 1. 了解工厂模式 2. 了解反射技术 一、线程池 昨天使用了数据库连接池,我们了解了连接池的优…...

打靶记录18——narak

靶机: https://download.vulnhub.com/ha/narak.ova 推荐使用 VM Ware 打开靶机 难度:中 目标:取得 root 权限 2 Flag 攻击方法: 主机发现端口扫描信息收集密码字典定制爆破密码Webdav 漏洞PUT 方法上传BF 语言解码MOTD 注入CVE-2021-3…...

LabVIEW编程能力如何能突飞猛进

要想让LabVIEW编程能力实现突飞猛进,需要采取系统化的学习方法,并结合实际项目进行不断的实践。以下是一些提高LabVIEW编程能力的关键策略: 1. 扎实掌握基础 LabVIEW的编程本质与其他编程语言不同,它是基于图形化的编程方式&…...

代码随想录算法训练营第四四天| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列

今日任务 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列 1143.最长公共子序列 题目链接: . - 力扣(LeetCode) class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp ne…...

2024.9.26 作业 +思维导图

一、作业 1、什么是虚函数?什么是纯虚函数 虚函数:函数前加关键字virtual,就定义为虚函数,虚函数能够被子类中相同函数名的函数重写 纯虚函数:把虚函数的函数体去掉然后加0;就能定义出一个纯虚函数。 2、基…...

WSL进阶体验:gnome-terminal启动指南与中文显示问题一网打尽

起因 我们都知道 wsl 启动后就死一个纯命令行终端,一直以来我都是使用纯命令行工具管理Linux的。今天看到网上有人在 wsl 中启动带图形界面的软件。没错,就是在wsl中启动带有图形界面的Linux软件。比如下面这个编辑器。 ​​ 出于好奇,我就…...

recoil和redux之间的选择

Recoil 和 Redux 是两个流行的 JavaScript 状态管理库,它们各自有不同的设计理念和使用场景。选择哪一个更好用,取决于你的具体需求、项目规模和个人偏好。 1. 设计理念 Redux 单向数据流:Redux 采用单向数据流模型,所有的状态变…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...