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

jmeter设置关联

一、为什么要设置关联?

http协议本身是无状态的,客户端只需要简单向服务器请求下载某些文件,无论是客户端还是服务端都不去记录彼此过去的行为,每一次请求之间都是独立的。如果jmeter需要设置跨线程组脚本,就必须设置关联,否则无法进行对应的操作。
举个例子,jmeter设置了3个线程组(登录、进入##查询页面、点击查询),如果未设置关联,线程组进入##查询页面、点击查询将无法继承用户成功登录的状态,响应一般会返回“用户未登录系统”
在这里插入图片描述

总结一波,关联的作用就是!!

(我自己是这么觉得的~)
(1)不同线程组之间传递同个值
(2)某传递值不在请求中,在响应文本/响应信息头中,而请求之间需要调用该值才能正常运行
(3)记得添加一个HTTP Cookie管理器(添加后同个线程组就不需要设置关联)

二、如何设置关联?

1、查找关联参数

要设置关联,不得不提到Cookie、Session机制
Session机制需要借助于cookie机制在客户端保存标识,是一种服务器端机制,服务器使用一种类似于散列表的结构来保存信息
做关联的时候可以用sessionid进行关联,下图举个例子帮助理解下Cookie、Session机制的区别与联系(理解不了就算了,咱继续往下看,成功设置关联就完事!)在这里插入图片描述
具体取哪个关联值,可以询问开发,也可使用抓包工具/chrome-F12等方法,查看系统,是在什么时候提供token。
一般查看【点击登录】操作的请求可找到,大部分都是以seesionid/cookie/token来设置,下面的例子取得是token值
在这里插入图片描述

2、添加正则表达式提取器

路径:请求点击鼠标右键-添加-后置处理器- 正则表达式提取器
在这里插入图片描述

取到的值就是一个局部变量,可以在同一个线程组内调用:${token},设置如下
在这里插入图片描述

页面参数说明:
-Apply to默认选中“main sample only”即可,仅作用于父节点取样器;
-要检查的响应字段:由于需要关联的信息在响应结果头部,则选中“信息头”。若需要关联的信息在响应文本中返回,则选中“主体”;
–引用名称:关联参数的名称;
–正则表达式:设置关联函数的左右边界值;
–模板:默认为 1 1 1
–匹配数字:若取到多个值,设置的匹配数字则能选择相应的值,默认为1
–缺省值:默认为空

正则表达式的写法:
格式:左边界(匹配内容)右边界
():封装了待返回的匹配字符串;
. :匹配任何单个字符串;
*:取0至无限长度
? :找到第一个匹配项后停止
(更高深的匹配找度娘,不懂咱就问!)
在这里插入图片描述

3、添加调试取样器

调试取样器用于调试脚本,可查看关联参数的取值情况
路径:右键点击线程组-添加-取样器-调试取样器(Debug Sample)在这里插入图片描述

放置在需要查看的事务(比如登录)后面,点击运行,查看察看结果树下的返回结果。
可以看见,正则表达式成功取值(这里没图啦!察看结果树中对比查看登录请求的响应文本token值和调试取样器的token值一致即可)。

4、设置全局变量

由于jmeter中的线程组是相对独立的,线程组1设置的函数,无法在线程组2中使用,因此,如果需要调用线程组1中的函数,则需要将该函数设置为全局变量。
菜单-工具-函数助手对话框,打开函数助手窗口

在这里插入图片描述

Name of property 设置的函数名称
Value of property 函数取的值
Return original value of property(default false)? 缺省值,默认为空
选择__setProperty函数,输入属性名称及函数取值,点击生成

Ps:点击【生成】就是复制
在这里插入图片描述

添加(BeanShell后置处理器)在这里插入图片描述

将上一步复制的函数字符串粘贴在此处
在这里插入图片描述

此时全局变量则设置完成。
(注意:全局变量函数中,“__”是双下划线)
${__setproperty}为设置全局变量的函数
${__property}为调用全局变量的函数

5、调用全局变量

找到需要调用关联参数的请求,在HTTP信息头管理器中填入变量
在这里插入图片描述

6、检查调用情况

运行脚本,查看察看结果树
(1)查看关联参数取值处请求的响应信息的token
(2)查看调用关联参数请求的请求信息的token
(3)以上两个token一致,调用成功
(4)可以直接看断言是否成功
温馨提示:调试脚本可以将请求先集中在一个线程组中,先排除脚本本身的问题,再设置关联进行跨线程调试。

wuu~~
又是学到知识的一天!
为自己点个赞!
在这里插入图片描述

相关文章:

  • 汇编笔记 01
  • 【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门
  • python将word文件转换成pdf文件
  • PHPExcel导出excel
  • Python调用pyspark报错整理
  • 在java中一般什么时候用==
  • 打卡今天学习 Linux
  • 美国服务器如何
  • 1 月 Web3 游戏行业概览:市场实现空前增长
  • [项目管理] 如何使用git客户端管理gitee的私有仓库
  • 【CV论文精读】EarlyBird: Early-Fusion for Multi-View Tracking in the Bird’s Eye View
  • LRU缓存
  • 图灵日记之java奇妙历险记--抽象类和接口
  • Redis核心技术与实战【学习笔记】 - 31.番外篇:Redis客户端如何与服务器端交换命令和数据
  • k8s 部署java应用 基于ingress+jar包
  • hexo+github搭建个人博客
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 30秒的PHP代码片段(1)数组 - Array
  • android图片蒙层
  • angular组件开发
  • C学习-枚举(九)
  • Hexo+码云+git快速搭建免费的静态Blog
  • java 多线程基础, 我觉得还是有必要看看的
  • JAVA并发编程--1.基础概念
  • Java教程_软件开发基础
  • leetcode388. Longest Absolute File Path
  • Python语法速览与机器学习开发环境搭建
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • tab.js分享及浏览器兼容性问题汇总
  • 半理解系列--Promise的进化史
  • 从0实现一个tiny react(三)生命周期
  • 对JS继承的一点思考
  • 开源地图数据可视化库——mapnik
  • 面试总结JavaScript篇
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 十年未变!安全,谁之责?(下)
  • 通过npm或yarn自动生成vue组件
  • Python 之网络式编程
  • 阿里云移动端播放器高级功能介绍
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #define、const、typedef的差别
  • #git 撤消对文件的更改
  • #HarmonyOS:基础语法
  • (06)金属布线——为半导体注入生命的连接
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Sublime Text3配置Lua运行环境
  • ******之网络***——物理***
  • 、写入Shellcode到注册表上线
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别