Jmeter关联,断言,参数化

 

一、关联

常用的关联有三种

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常用的一些函数

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

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

相关文章

C#常用数据结构栈的介绍

定义 在C#中&#xff0c;Stack<T> 是一个后进先出&#xff08;LIFO&#xff0c;Last-In-First-Out&#xff09;集合类&#xff0c;位于System.Collections.Generic 命名空间中。Stack<T> 允许你将元素压入栈顶&#xff0c;并从栈顶弹出元素。 不难看出&#xff0c;…

Vue引入js脚本问题记录(附解决办法)

目录 一、需求 二、import引入问题记录 三、解决方式 一、需求 我想在我的Vue项目中引入jquery.js和bootstrap.js这种脚本文件&#xff0c;但发现不能单纯的import引入&#xff0c;问题如下。 二、import引入问题记录 我直接这么引入&#xff0c;发现控制台报错TypeError: …

华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?

场景介绍 本章节将向您介绍如何在地图的指定位置添加点注释以标识位置、商家、建筑等&#xff0c;并可以通过信息窗口展示详细信息。 点注释支持功能&#xff1a; 支持设置图标、文字、碰撞规则等。支持添加点击事件。 PointAnnotation有默认风格&#xff0c;同时也支持自定…

《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch9 策略梯度方法 Box 8.1 马尔可夫决策过程的平稳分布

Box 8.1&#xff1a; 马尔可夫决策过程的平稳分布 整理自 链接 分析平稳分布的关键工具是 P π ∈ R n n P_\pi \in {\mathbb R}^{n\times n} Pπ​∈Rnn&#xff0c;它是给定策略 π π π 下的概率转移矩阵。 如果状态被索引为 s 1 , ⋯ , s n s_1,\cdots, s_n s1​,⋯…

idea2021git从dev分支合并到主分支master

1、新建分支 新建一个名称为dev的分支&#xff0c;切换到该分支下面&#xff0c;输入新内容 提交代码到dev分支的仓库 2、切换分支 切换到主分支&#xff0c;因为刚刚提交的分支在dev环境&#xff0c;所以master是没有 3、合并分支 点击push&#xff0c;将dev里面的代码合并到…

图片尺寸不合适?这3款免费好用的AI绘图神器帮你免费无缝拓展!一键扩展画面之外的内容,真的泰裤啦!

大家好&#xff0c;我是灵魂画师向阳 在处理图片素材时&#xff0c;大家有没有遇到过尺寸不合适但又不能裁切的情况&#xff1f;是不是也想过图像要是能自己“长”出一块就好了&#xff1f;这种要求在以前或许很难实现&#xff0c;但生产式 AI 技术出现后它就不再是问题了&…

基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue

基于GIKT深度知识追踪模型的习题推荐系统 目录结构 Flask-BackEnd flask后端 app 后端主体文件 alg 深度学习模块 data 数据集data_process.py 数据预处理gikt.py GIKT模型pebg.py PEBG模型params.py 一些参数train.py 仅模型训练train_test.py 模型训练和测试-五折交叉验证t…

WebGIS开发四大开源框架对比

本篇文章主要介绍GIS开发四大地图框架的差异和特点。 Cesium: Cesium是目前主流的一款三维地图框架&#xff0c;支持桌面端、web端、移动端等多平台。Mapbox&#xff1a;高清经纬度矢量瓦片&#xff0c;个性化前端表达&#xff0c;前端矢量绘制&#xff0c;支持海量地名地址。…

数据库实验2—1

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名称…

仓颉编程入门2,启动HTTP服务

上一篇配置了仓颉sdk编译和运行环境&#xff0c;读取一个配置文件&#xff0c;并把配置文件简单解析了一下。 前面读取配置文件&#xff0c;使用File.readFrom()&#xff0c;这个直接把文件全部读取出来&#xff0c;返回一个字节数组。然后又创建一个字节流&#xff0c;给文件…

C语言实现常见的数据结构

栈 栈是一种后进先出&#xff08;LIFO, Last In First Out&#xff09;的数据结构 #include <stdio.h> #include <stdlib.h>#define MAX 100typedef struct {int data[MAX];int top; } Stack;// 初始化栈 void init(Stack *s) {s->top -1; }// 判断栈是否为空…

VBA技术资料MF204:右键多按钮弹出菜单中使用图标

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

【python】【绘制小程序】动态爱心绘制

背景介绍 参考链接&#xff1a;https://blog.csdn.net/Python_HUHU/article/details/139703289点的背景颜色在开始修改&#xff1b;文字的颜色在最后修改。文字内容可以修改。 python 代码 import tkinter as tk import random from math import sin, cos, pi, log from PIL…

Cocos 3.8.3 实现外描边效果(逃课玩法)

本来想着用Cocos 的Shader Graph照搬Unity的思路来加外描边&#xff0c;发现不行&#xff0c;然后我就想弄两个物体不就行了吗&#xff0c;一个是放大的版本&#xff0c;再放大的版本上加一个材质&#xff0c;这个材质面剔除选择前面的面剔除就行了&#xff0c;果不其然还真行。…

如何使用ssm实现基于java web的防疫工作志愿者服务平台的设计与实现

TOC ssm693基于java web的防疫工作志愿者服务平台的设计与实现jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进…

详细解读,F5服务器负载均衡的技术优势

在现代大规模、高流量的网络使用场景中&#xff0c;为应对高并发和海量数据的挑战&#xff0c;服务器负载均衡技术应运而生。但凡知道服务器负载均衡这一名词的&#xff0c;基本都对F5有所耳闻&#xff0c;因为负载均衡正是F5的代表作&#xff0c;换句通俗易懂的话来说&#xf…

makefile和CMakeLists/C++包管理器

make 大家可能会很奇怪&#xff0c;都什么年代了&#xff0c;还学makefile&#xff0c;cmake都有些过时了&#xff0c;为什么还要再学这个呢&#xff1f; 我是这么看待这个问题的&#xff0c;cmake跨平台性还是很有有优势的&#xff0c;有着多年积累的底蕴&#xff0c;借助大模…

基于springboot的驾校预约管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的驾校预约管理系统5拥有三种角色&#xff1a;管理员、教练、学员 管理员&#xff1a;学员管理、教练管理、车辆管理、车辆关联、维修管理等 教练&#xff1a;学员查看/毕…

再次重温 Spring 中 Bean 的生命周期

Bean的生命周期 Spring中的bean的生命周期主要包含四个阶段&#xff1a;实例化Bean --&#xff1e; Bean属性填充 --&#xff1e; 初始化Bean --&#xff1e;销毁Bean 首先是实例化Bean&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要…

hive-拉链表

目录 拉链表概述缓慢变化维拉链表定义 拉链表的实现常规拉链表历史数据每日新增数据历史数据与新增数据的合并 分区拉链表 拉链表概述 缓慢变化维 通常我们用一张维度表来维护维度信息&#xff0c;比如用户手机号码信息。然而随着时间的变化&#xff0c;某些用户信息会发生改…