简单的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.mzph.cn/news/892067.shtml

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

相关文章

Unity3D仿星露谷物语开发17之空库存栏UI

1、目标 将库存栏放在游戏界面中&#xff0c;一般情况下角色居中展示时库存栏在底部&#xff0c;当角色位于界面下方时库存栏展示在顶部避免遮挡。 2、CanvasGroup组件 用于集中控制UI元素的透明度、交互性和射线投射行为。CanvasGroup的Alpha属性允许渐变效果&#xff0c;I…

现代谱估计的原理及MATLAB仿真(二)(AR模型法、MVDR法、MUSIC法)

现代谱估计的原理及MATLAB仿真AR参数模型法&#xff08;参数模型功率谱估计&#xff09;、MVDR法&#xff08;最小方差无失真响应法&#xff09;、MUSIC法&#xff08;多重信号分类法&#xff09; 文章目录 前言一、AR参数模型1 原理2 MATLAB仿真 二、MVDR法1 原理2 MATLAB仿真…

交换机划分Vlan配置

交换机划分Vlan配置 实验目标 理解虚拟LAN(VLAN)基本配置&#xff1b;掌握一般交换机按端口划分VLAN的配置方法&#xff1b;掌握Tag VLAN配置方法。 实验背景 某一公司内财务部、销售部的PC通过2台交换机实现通信&#xff1b;要求财务部和销售部的PC可以互通&#xff0c;但…

《Opencv》信用卡信息识别项目

目录 一、项目介绍 二、数据材料介绍 1、模板图片&#xff08;1张&#xff09; 2、需要处理的信用卡图片&#xff08;5张&#xff09; 三、实现过程 1、导入需要用到的库 2、设置命令行参数 3、模板图像中数字的定位处理 4、信用卡图像处理 5、模板匹配 四、总结 一…

.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人

资源及介绍接上篇 nuget引用以下组件 效果展示&#xff1a; 内存和cpu占有&#xff1a; 代码如下&#xff1a;路径换成自己的模型路径 模型请从上篇文尾下载 internal class Program{private static CancellationTokenSource? cts;private static IChatClient? model;privat…

特种设备安全管理人员免费题库限时练习(判断题)

56.(判断题)特别重大事故、重大事故、较大事故和一般事故,负责事故调查的人民政府应当自收到事故调查报告之日起15日内做出批复。 A.正确 B.错误 答案:错误 57.(判断题)每一类事故灾难的应急救援措施可能千差万别,因此其基本应急模式是不一致的。 A.正确 B.错误 答案:错…

在Virtuoso中使用Clisoft SOS

在Virtuoso中使用Clisoft SOS 由于本人也是刚接触&#xff0c;后续用到其他的再进行更新&#xff0c;博客中可能有地方写的不好&#xff0c;欢迎大佬指点。 一、打开virtuoso 创建一个cds.lib&#xff08;不受SOS版本控制&#xff09; [bhlumaster /proj/trinity/work/cds/bh…

Android Audio基础(53)——PCM逻辑设备Write数据

1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在 ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图。: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间数据不能随便…

算命网站源码PHP框架_附2025新版设计书教程

算命网站源码PHP设计书 1. 项目概述 1.1 项目背景 随着互联网的发展&#xff0c;越来越多的人对命理和占卜产生了兴趣。算命网站可以为用户提供个性化的命理分析、运势预测等服务。本项目旨在设计一个基于PHP的算命网站&#xff0c;方便用户在线获取命理服务。 1.2 项目目标…

【Linux】硬链接和软连接(符号连接)

目录 硬链接 软连接 硬链接和软连接的区别 硬链接 ln根据linux系统分配给文件inode(ls -li)进行建立&#xff0c;没办法跨越文件系统 格式&#xff1a;ln 被链接的文件(源文件) 生成的链接文件(目标文件) 1) 硬链接的属性 - 相当于生成一个副本 起别名 2) 修改内容都变化…

后台管理系统全屏功能实现

后台管理系统中有一个比较常见的功能就是全屏显示&#xff0c;以方便用最大的屏幕查看系统&#xff0c;特别是在小屏模式下。 对于 screenfull 而言&#xff0c;浏览器本身已经提供了对用的 API&#xff0c;点击这里即可查看&#xff0c;这个 API 中&#xff0c;主要提供了两个…

Ensp基础实验---同网段PC以及网关之间的通信

通过安装ENSP&#xff0c;可以模拟搭建网络仿真环境&#xff0c;初步了解ENSP之后&#xff0c;可以进行一些简单的网络拓扑搭建&#xff0c;通过对相关设备的配置&#xff0c;实现网络畅通的目的 此次模拟的是同一个网段内&#xff0c;两台PC之间的通信情况&#xff0c;同时选用…

WinDbg内存泄露追踪

随着win sdk一并安装了&#xff0c;可以在C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 里找到 管理员运行cmd 配置跟踪 cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64 gflags.exe设置待跟踪的应用程序 gflags.exe /i D:\XXXX.exe ust运行应用程序&am…

4.1.3 串

文章目录 串的基本概念串的基本操作串的存储结构 串的基本概念 串&#xff0c;仅由字符构成的有限序列。 串长&#xff1a;串中的字符个数。空串&#xff1a;长度为0的串。空格串&#xff1a;一个或多个空格构成的串。子串&#xff1a;串中任意长度连续字符构成的序列。含有字…

RK3588+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案

RK3588FPGA核心板采用Rockchip RK3588新一代旗舰 级八核64位处理器&#xff0c;支持8K视频编解码&#xff0c;多屏4K输出&#xff0c;可实现12屏联屏拼接、同显、异显&#xff0c;适配多种操作系统&#xff0c;广泛适用于展览展示、广告内容投放、新零售、商超等领域实现各种媒…

Unity中 Xlua使用整理(一)

1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包&#xff0c;并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…

MBTiles 及爬取到发布

MBTiles &#xff1a;https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准&#xff0c;该标准的目的是即时传输和使用数据。 作为一个容器格式&#xff0c;MBTiles可以存储任何瓦片数据,…

Clisoft SOS设置Server和Project

Clisoft SOS设置Server和Project 一、关于SOS Servers、Clients、Projects和Work Areas 以下三个图是官方文档中介绍的三种情况 图1&#xff1a;带有两个客户端的SOS服务器 图2&#xff1a;使用本地缓存服务器 图3&#xff1a;远程设计团队的缓存服务器 因为SOS软件需要…

调整Python+Pytest+Allure+Yaml+Pymysql框架中需要执行的用例顺序

当pytest框架中有时时候会因为用例的前后关联关系需要调整用例执行顺序时则可以跟进具体的要求调整pytest.ini配置文件中执行用例文件夹的前后顺序 当如果是需要调整某个文件夹中用例的执行顺序时&#xff0c;则跟进具体的文件调整对应testcases中test_*.py文件中的执行顺序

【Dify】Dify自定义模型设置 | 对接DMXAPI使用打折 Openai GPT 或 Claude3.5系列模型方法详解

一、Dify & DMXAPI 1、Dify DIFY&#xff08;Do It For You&#xff09;是一种自动化工具或服务&#xff0c;旨在帮助用户简化操作&#xff0c;减少繁琐的手动操作&#xff0c;提升工作效率。通过DIFY&#xff0c;用户能够快速完成任务、获取所需数据&#xff0c;并且可以…