简单的jmeter数据请求学习

在这里插入图片描述

简单的jmeter数据请求学习

1.需求

我们的流程服务由原来的workflow-server调用wfms进行了优化,将wfms服务操作并入了workflow-server中,去除了原来的webservice服务调用形式,增加了并发处理,现在想测试模拟一下,在一定并发的条件下获取下一岗位信息的接口,发起流程,提交流程等接口是否会有问题,此处使用jmeter进行测试,所以我这简单了解了一下jmeter的基本逻辑以及接口测试流程,简单记录一下方便后续使用时查看。

2. 简单使用

2.1 调用接口整理

此次主要测试流程发起,获取下一岗位以及下一岗位提交接口,我们微服务有权限验证,所以需要先调用登录接口,然后进行模拟。那么确定了主要就是5个接口了,具体的接口信息如下:

  • 登录接口 + 选择机构 获取权限信息
  • 发起流程
  • 查询下一岗位信息
  • 提交流程到下一岗位
  • 撤销流程

2.2 编写登录/选择机构接口

2.2.1 登录接口

观察一下我们登录接口的请求路径以及请求形式,了解到登录url: 3.1.19.155:8901/login/login
在这里插入图片描述
设置请求的参数类型为 text/plain,header中带有一个请求systemflag参数用于判定请求系统,0信贷 1风险
在这里插入图片描述
那么我们的登录接口jmeter设置如下:
在这里插入图片描述
我们的整体调用ip地址固定,所以设置用户自定义全局参数ip,value值为:3.1.19.155
在这里插入图片描述
在这里插入图片描述
设置完自定义全局参数后,再设置一个setUp线程组,用于设置请求接口的请求线程数量,我们的是登录接口,登录一次即可,所以设置参数全部为1

注意:setUp线程组在开始前执行一次,setDown线程组在结束前执行一次,线程组正常中间执行

在这里插入图片描述
在这里插入图片描述
之后我们添加取样器,http请求,里面具体配置我们的请求参数,地址,请求方式等信息,具体的设置信息如下所示:
在这里插入图片描述
在这里插入图片描述
在此之后,我们还要添加JSON提取器,用于获取接口响应的参数信息,我们调用脚本$.data.X_Token获取,此处我们获取的token信息,并且创建一个名为token的参数进行存储,可在后续接口中使用,具体实现如下:
在这里插入图片描述
在这里插入图片描述
此处为我们响应的参数信息,所以才能使用如上脚本$.data.X_Token获取token信息

{"code": 1,"data": {"X_Token": "LOGIN_TOKEN:0f3b9dba281944eab8f493856d6c0c09","organization": [{"orgCd": "0001","orgName": "辽宁省农村信用社联合社"}]},"msg": "ok"
}

在此后,我们还要设置一个beanShell后置处理器,用于将token设置为全局变量,让所有请求都可以使用,具体配置如下:
在这里插入图片描述
在这里插入图片描述
脚本内容为:${__setProperty(new_token,${token},)};,设置参数

__setProperty 是 JMeter 提供的一个内置函数,用于设置全局属性(property)。全局属性可以在整个测试计划中访问,并且可以跨线程组共享,JSON提取器获取参数作用域为线程级别,所以需要调用__setProperty 设置全局可用。
参数解释:

  • 第一个参数 (new_token):这是你要设置的属性名称。在这个例子中,属性名称为 new_token。
  • 第二个参数 (${token}):这是你要设置的属性值。${token} 是一个变量引用,表示从其他地方获取的值(例如通过 HTTP 请求返回的响应数据)。
  • 第三个参数 (空字符串 ,):这是一个可选参数,通常用于指定默认值。如果省略或为空,则不使用默认值。
  • 整体含义:
    这个表达式的目的是将 ${token} 的值赋给名为 new_token 的全局属性。之后,你可以在整个 JMeter 测试计划中的任何地方使用 ${__P(new_token,)} 或 ${__property(new_token,)} 来引用这个属性值。

2.2.2 选机构接口

我们的选机构接口与登录接口略有不同,登录接口在网关中没有设置验签验证,但是其他接口在调用网关接口时,都需要进行验签,需要按照规则生成验签码,并且还需要用到之前登录接口生成的token信息,作为header必要参数传入到选机构接口,具体配置如下:

首先新增一个http请求,并且设置请求参数信息
在这里插入图片描述
在这里插入图片描述
新增http请求之后,我们需要设置其header请求信息,包含验签sign信息以及token信息,具体配置如下所示:
在这里插入图片描述
在这里插入图片描述

我们看到,我们的请求接口header信息中包含了X_token,X_sign,X_Timestamp,systemFlag信息,Cookie信息非必填,其值分别如下:

参数名称参数值含义
X_Token${__property(new_token,)}获取登录接口token信息
X_Sign${__digest(MD5,${__V(${__substring(${__property(new_token,,)},num1,num2...... 验签规则,下面详解
X_Timestamp${__time(/1000,)}时间戳,单位秒
systemFlag1系统标识

我们主要观察一下验签部分,值具体的参数如下:

${__digest(MD5,${__V(${__substring(${__property(new_token,,)},num1,num2,)}${__time(/1000,)}${__substring(${__property(new_token,,)},num3,num4,)})},,,)}

此表达式使用了多个 JMeter 内置函数来生成一个 MD5 摘要,需要逐步解析这个表达式的各个部分

  • __property 函数
    ${__property(new_token,,)}
    • 功能:获取全局属性 new_token 的值。
    • 参数:
      • new_token:属性名称。
      • 空字符串 ,:默认值(如果属性不存在,则返回空字符串)
  • __substring 函数
    ${__substring(${__property(new_token,,)},num1,num2,)}
    ${__substring(${__property(new_token,,)},num3,num4,)}
    • 功能:从字符串中提取子串。
    • 参数:
      • ${__property(new_token,)}:源字符串。
      • num1 和 num2:起始和结束位置(第一个子串)。
      • num3 和 num4:起始和结束位置(第二个子串)。
  • __time 函数
    ${__time(/1000,)}
    • 功能:获取当前时间戳(以秒为单位)。
    • 参数:
      • /1000:将毫秒转换为秒。
  • __V 函数
    ${__V(${__substring(${__property(new_token,,)},num1,num2,)}${__time(/1000,)}${__substring(${__property(new_token,,)},num3,num4,)})}
    • 功能:用于嵌套变量或函数的结果,确保它们按顺序执行并组合成一个字符串。
    • 参数:嵌套的表达式。
  • __digest 函数
    ${__digest(MD5,${__V(${__substring(${__property(new_token,,)},num1,num2,)}${__time(/1000,)}${__substring(${__property(new_token,,)},num3,num4,)})},,,)}
    • 功能:生成指定算法的摘要(哈希值)。
    • 参数:
      • MD5:使用的哈希算法。
      • ${__V(…):要哈希的字符串。
      • 空字符串 ,:盐值(可选,默认为空)。
      • 空字符串 ,:编码(可选,默认为空)。

整体解释,这个表达式的目的是:
获取全局属性 new_token 的值。从 new_token 中提取两个子串(第num1到num2位和第num3到num4位)。获取当前时间戳(以秒为单位)。将上述三个部分组合成一个字符串。对组合后的字符串进行 MD5 哈希运算,生成一个 MD5 摘要。

最后在setUP线程组上设置汇总报告以及查看结果树信息
在这里插入图片描述

2.2.3 测试结果

我们选中登录选选岗,然后点击运行绿色按钮,观察汇总报告以及查看结果树信息,发现都可以正常访问了,具体信息如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 发起流程

在岗位选择之后,我们便可以发起流程了,注意,我们发起流程的时候,我们需要携带验签信息以及权限信息才能访问接口,所以需要使用到前面的token信息以及时间戳信息,还有sign信息。

具体实现步骤如下,首先新增一个线程组,设置线程个数以及线程启动时间,以及持续时间等
在这里插入图片描述
在这里插入图片描述
我们发起的业务编号也需要动态设定,按照 MCON + 时间戳 + 7位自增序列 进行生成,整体是post json格式传递请求参数
在这里插入图片描述
请求参数信息具体如下:

{"bizId": "MCON${__time(yyyyMMdd,date)}99${__Random(10000,99999,n)}", "creatorLV": "","customerName": "沈阳艺锦园林工程有限公司","customerNum": "20330134297","orgCd": "1019","userCd": "153805","variableMap": {"custManager":"153805", "FSFlag":"0","ruleResult":"0"},"workFlowProductEnum": "BIZ_TYPE_CD_BIZ","workFlowSysEnum": "DICS"
}

参数解释如下:

  • ${__time(yyyyMMdd,date)}:
    __time 是JMeter的一个函数,用于获取当前时间。
    参数 yyyyMMdd 指定了日期格式为年月日(例如:20231005)。
    date 是一个可选参数,通常可以省略,默认使用当前系统时间。
    该部分会生成类似 20231005 的字符串。

  • ${__Random(10000,99999,n)}:
    __Random 是JMeter的一个函数,用于生成随机数。
    参数 10000 和 99999 分别指定了随机数的最小值和最大值范围(即五位数)。
    参数 n 表示返回的随机数是数字格式。
    该部分会生成一个五位的随机数,例如 12345

添加一个请求头处理器,用于添加请求头信息,主要设置sign,token等验签鉴权信息,请求头信息与之前的选机构接口一致,就不多赘述。
在这里插入图片描述
在这里插入图片描述
添加JSON提取器,提取接口响应数据信息,具体配置如下:
在这里插入图片描述
创建三个参数信息,processId、taskId以及bizId,其中Match No. (0 for Random) 1;1;1 表示获取json响应数据第一个匹配值,具体匹配策略如下所示:

Match No. (0 for Random):这个参数决定了从所有匹配的结果中选择哪一个。

  • 1:表示选择第一个匹配项。
  • 2:表示选择第二个匹配项。
  • 0:表示随机选择一个匹配项。

添加一个beanShell后置处理器,用于获取发起流程的结果,然后将结果配置到一个固定目录的文件之中
在这里插入图片描述
具体配置如下所示:
在这里插入图片描述
测试结果写入文件部分代码如下所示:

FileWriter fstream = new FileWriter("D://test2.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
num = vars.get("bizId_matchNr");
for(int i=1;i<=(Integer.parseInt(num));i++){out.write(vars.get("processId")+",");out.write(vars.get("taskId")+",");out.write(vars.get("bizId")+"\n");
}
out.close();
fstream.close();

vars.get(“bizId_matchNr”); 语句含义如下所示:

  • vars.get
    vars是JMeter中的一个内置对象,表示当前线程(用户)的变量映射。你可以通过 vars 对象来设置和获取自定义变量。
    get 方法用于从 vars 对象中获取指定名称的变量值。

  • bizId_matchNr:
    ‌JMeter中的_matchNr变量用于表示通过JSON提取器匹配到的数据条数。‌
    在JMeter中,_matchNr是一个特殊的变量,用于表示通过JSON提取器匹配到的数据条数。当使用JSON提取器提取响应数据 时,如果响应中包含多个匹配项,_matchNr变量会记录匹配到的数据条数。这个变量可以用于后续的测试脚本中,以便根据匹配到的数据条数进行相应的操作

我们可以添加调试后置处理器,观察里面的参数变化
在这里插入图片描述
在这里插入图片描述
我们可以看到对应参数信息,bizId,processId。。。。。。
在这里插入图片描述

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

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

相关文章

C++编程基础之override关键字

在C中&#xff0c;override关键字用于显式地标识派生类中的成员函数是对基类中虚函数的重写&#xff0c;具有以下重要作用和使用说明&#xff1a; 作用 增强代码可读性&#xff1a;通过使用override关键字&#xff0c;能够清晰地向阅读代码的人表明该函数是有意重写基类中的虚…

Leecode刷题C语言之按键变更的次数

执行结果:通过 执行用时和内存消耗如下&#xff1a; int countKeyChanges(char* s) {int count0,i0;while(s[i]!\0){if((s[i]!s[i1])&&(s[i]!(s[i1]32))&&(s[i]!(s[i1]-32))&&s[i1]!0)count;i;}return count; }解题思路&#xff1a; 初始化变量&…

免费一键图片转3D模型,AI建模,一键把图片转三维模型,二维图片转3维模型,AI建模

免费一键图片转3D模型&#xff0c;AI建模&#xff0c;一键把图片转三维模型&#xff0c;二维图片转3维模型,AI建模&#xff0c;公测版&#xff0c;每天不定时免费开放&#xff0c;非常强大 1咱们先打开ai.glbxz.com http://ai.glbxz.com 22 2导入图片。支持单张和多张图片生成…

vue3中el-table实现多表头并表格合并行或列

1、el-table中添加事件 :span-method"genderSpanCity" <el-table :span-method"genderSpanCity":data"data.tableData":fit"true" table-layout"fixed" header-align"center" stripestyle"width:100%;he…

GOAT‘S AI早鸟报Part9

资讯 英伟达重磅发布5090&#xff0c;定价15000 老黄重磅发布5090&#xff0c;定价15000&#xff01;22000元的世界最小AI超级计算机也来了 英伟达在CES发布了最新的GPU——RTX 5090&#xff0c;采用Blackwell架构&#xff0c;具备920亿个晶体管&#xff0c;4000 AI TOPS的AI…

【STM32+CubeMX】 新建一个工程(STM32F407)

相关文章&#xff1a; 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定&#xff1a;本系列的前五篇&#xff0c;为了方便新手玩家熟悉CubeMX、Keil的使用&#xff0c;会详细地截图每一步Cu…

HTML5实现喜庆的新年快乐网页源码

HTML5实现喜庆的新年快乐网页源码 前言一、设计来源1.1 主界面1.2 关于新年界面1.3 新年庆祝活动界面1.4 新年活动组织界面1.5 新年祝福订阅界面1.6 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现喜庆的新年快乐网页源码&#xff0c;春节新年网…

鸿蒙的APP真机调试以及发布

目录&#xff1a; 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 &#xff08;1&#xff09;在File->Project Structure->Project->Signing Configs中进行登录。(未…

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…

【Linux】Linux指令apt、systemctl、软链接、日期时区

一、apt命令 1.1 Linux系统的应用商店 操作系统安装软件有许多种方式&#xff0c;一般分为&#xff1a; 下载安装包自行安装 如win系统使用exe文件、msi文件等如mac系统使用dmg文件、pkg文件等 系统的应用商店内安装 如win系统有Microsoft Store商店如mac系统有AppStore商…

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…

C++list

1. list的介绍及使用 1.1list的介绍 list的文档介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双相迭代 2.list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过…

Java 日期时间格式化标准

文章目录 Java日期时间格式化符号ISO 8601中的日期时间ISO 8601标准的定义ISO 8601日期时间格式 周数年份ISO 8601中的周数年份Java中的周数年份 Java跨年日期格式化BUG注意事项 Java日期时间格式化符号 JDK官网截图&#xff1a; 格式化符号梳理&#xff1a; 符号描述符号用…

【计算机视觉】单目深度估计模型-Depth Anything-V2

概述 本篇将简单介绍Depth Anything V2单目深度估计模型&#xff0c;该模型旨在解决现有的深度估计模型在处理复杂场景、透明或反射物体时的性能限制。与前一代模型相比&#xff0c;V2版本通过采用合成图像训练、增加教师模型容量&#xff0c;并利用大规模伪标签现实数据进行学…

如何在Windows上编译OpenCV4.7.0

前言 ​ 参考&#xff1a;Win10 下编译 OpenCV 4.7.0详细全过程&#xff0c;包含xfeatures2d 这里在其基础上还出现了一些问题&#xff0c;仅供参考。 正文 一、环境 1、win10 2、cmake-gui 3、opencv4.7.0 4、VS2019 二、编译过程 1、下载需要的文件&#xff1a; 通…

ros2-4.1 服务通信介绍

服务是ROS图中节点之间的另一种通信方法。服务分为客户端和服务端&#xff0c;客户端发送请求给服务端&#xff0c;服务端可以根据客户端的请求做一些处理&#xff0c;然后返回结果给客户端。也称为为请求-响应模型。 服务和话题的不同之处&#xff0c;话题是没有返回的&#…

代码随想录算法训练营第四十天 | 股票问题

LeetCode 121.买卖股票的最佳时机&#xff1a; 文章链接 题目链接&#xff1a;121.买卖股票的最佳时机 思路 方法1&#xff1a;暴力 看到题目最直接的想法是双层遍历求最大区间差 class Solution:def maxProfit(self, prices):if len(prices) < 1:return 0result 0for…

EyeSoothe: Your Ultimate Eye Health Companion

In today’s screen-dominated world, our eyes deserve extra care. EyeSoothe is the ultimate app for anyone looking to track their vision, rejuvenate tired eyes, and find the perfect eyewear—all powered by intelligent AI and packed into one seamless app. h…

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl

【python】matplotlib(radar chart)

文章目录 1、功能描述和原理介绍2、代码实现3、效果展示4、完整代码5、多个雷达图绘制在一张图上6、参考 1、功能描述和原理介绍 基于 matplotlib 实现雷达图的绘制 一、雷达图的基本概念 雷达图&#xff08;Radar Chart&#xff09;&#xff0c;也被称为蛛网图或星型图&…