简单的jmeter数据请求学习

news2025/1/7 21:41:59

在这里插入图片描述

简单的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.coloradmin.cn/o/2272858.html

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

相关文章

conda/pip基本常用命令理解与整理

最近配置了两轮pytorch环境&#xff0c;由于要频繁用到各种conda和pip命令&#xff0c;所以再此整理一下。 文章目录 前言&#xff1a;conda虚拟环境总结与解读Conda和pip的理解区别和联系命令格式 conda环境命令查看创建和删除导出与导入激活和退出 包管理命令安装和删除文件批…

Maven 详细配置:Maven settings 配置文件的详细说明

Maven settings 配置文件是 Maven 环境的重要组成部分&#xff0c;它用于定义用户特定的配置信息和全局设置&#xff0c;例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件&#xff08;settings.xml&#xff09;和用户配置文件&#x…

Unity-Mirror网络框架-从入门到精通之Chat示例

文章目录 前言Chat聊天室Authentication授权ChatAuthenticatorChat示例中的授权流程聊天Chat最后 前言 在现代游戏开发中&#xff0c;网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架&#xff0c;专为多人游戏开发设计。它使得开发者能够轻…

复杂园区网基本分支的构建

目录 1、各主机进行网络配置。2、交换机配置。3、配置路由交换&#xff0c;进行测试。4、配置路由器接口和静态路由&#xff0c;进行测试。5、最后测试任意两台主机通信情况 模拟环境链接 拓扑结构 说明&#xff1a; VLAN标签在上面的一定是GigabitEthernet接口的&#xff0c…

这是什么操作?强制迁移?GitLab 停止中国区用户访问

大家好&#xff0c;我是鸭鸭&#xff01; 全球知名代码托管平台 GitLab 发布通告&#xff0c;宣布不再为位于中国大陆、香港及澳门地区的用户提供访问服务&#xff0c;并且“贴心”建议&#xff0c;可以访问极狐 GitLab。 极狐 GitLab 是一家中外合资公司&#xff0c;宣称获得…

CDP集成Hudi实战-spark shell

[〇]关于本文 本文主要解释spark shell操作Hudi表的案例 软件版本Hudi1.0.0Hadoop Version3.1.1.7.3.1.0-197Hive Version3.1.3000.7.3.1.0-197Spark Version3.4.1.7.3.1.0-197CDP7.3.1 [一]使用Spark-shell 1-配置hudi Jar包 [rootcdp73-1 ~]# for i in $(seq 1 6); do s…

设计模式学习[15]---适配器模式

文章目录 前言1.引例2.适配器模式2.1 对象适配器2.2 类适配器 总结 前言 这个模式其实在日常生活中有点常见&#xff0c;比如我们的手机取消了 3.5 m m 3.5mm 3.5mm的接口&#xff0c;只留下了一个 T y p e − C Type-C Type−C的接口&#xff0c;但是我现在有一个 3.5 m m 3.…

数据挖掘——数据预处理

数据挖掘——数据预处理 数据预处理数据预处理 ——主要任务数据清洗如何处理丢失的数据如何处理噪声数据如何处理不一致数据 数据集成相关分析相关系数(也成为皮尔逊相关系数)协方差 数据规约降维法&#xff1a;PCA主成分分析降数据——抽样法数据压缩 数据预处理 数据预处理…

Unity-Mirror网络框架-从入门到精通之CCU示例

文章目录 前言什么是CCU&#xff1f;测试结果最后 前言 在现代游戏开发中&#xff0c;网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架&#xff0c;专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文…

如何在 Ubuntu 22.04 上安装 Nagios 服务器教程

简介 在本教程中&#xff0c;我们将解释如何在 Ubuntu 22.04 上安装和配置 Nagios&#xff0c;使用 Apache 作为 Web 服务器&#xff0c;并通过 Let’s Encrypt Certbot 使用 SSL 证书进行保护。 Nagios 是一个强大的监控系统&#xff0c;它可以帮助组织在 IT 基础设施问题影…

大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术

联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…

Javascript算法——贪心算法(一)

贪心算法详解&#xff08;JavaScript&#xff09;&#xff08;局部最优->全局最优&#xff09; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下的最优选择&#xff08;局部最优&#xff09;的算法设计方法。通过局部最优解的累积&…

141.《mac m系列芯片安装mongodb详细教程》

文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…

【ArcGISPro/GeoScenePro】裁剪和打包栅格数据

检查并处理扫描地图 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 使用标准相机或扫描仪创建的数字影像通常存储在 RGB 颜色模型中,这意味着这些影像将由红色、绿色和蓝色三个栅格组成。 此扫描地图在提供给您之前已在坐标系…

【C++】B2109 统计数字字符个数

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述与输入输出要求题目&#xff1a;统计数字字符个数样例输入输出 &#x1f4af;方法分析与代码实现方法 1&#xff1a;使用 fgets 读取输入并手动判断数字字符代码实…

基于32单片机的智能语音家居

一、主要功能介绍 以STM32F103C8T6单片机为控制核心&#xff0c;设计一款智能远程家电控制系统&#xff0c;该系统能实现如下功能&#xff1a; 1、可通过语音命令控制照明灯、空调、加热器、窗户及窗帘的开关&#xff1b; 2、可通过手机显示和控制照明灯、空调、窗户及窗帘的开…

git理解记录

文章目录 1. 背景2. 基本概念3. 日常工作流程4. 其他常见操作4.1 merge合并操作4.2 tag打标签操作4.3 remoute远程操作4.4 撤销修改 git理解记录 1. 背景 git作为分布式版本控制系统&#xff0c;开源且免费&#xff0c;相比svn集中式版本控制系统存在速度快(HEAD指针指向某次co…

开启宝塔Nginx防火墙支付返回失败解决方法

1.把/plugin.php加到Nginx防火墙URL白名单 包括支付服务器回调ip 2.如果支持带参数 /plugin.php?idzhifufm:notify 加到Nginx防火墙标准模式-URL白名单带参数 如果上面都不行 就把下面的IP加入白名单 39.107.193.172 47.94.194.103 47.104.216.190

平安产险安徽分公司携手安徽中医药临床研究中心附属医院 共筑儿童安全防护网

为响应金融知识普及教育号召&#xff0c;平安产险安徽分公司联动安徽中医药临床研究中心附属医院&#xff0c;于近日在朝霞小学举办了一场儿童安全防范与健康守护活动。此次活动旨在提升学生的安全防范意识&#xff0c;守护儿童健康成长&#xff0c;同时有力推动金融知识与传统…

Elasticsearch:Lucene 2024 年回顾

作者&#xff1a;来自 Elastic Chris Hegarty 2024 年对于 Apache Lucene 来说又是重要的一年。在本篇博文中&#xff0c;我们将探讨主要亮点。 Apache Lucene 在 2024 年表现出色&#xff0c;发布了许多版本&#xff0c;包括三年来的首次重大更新&#xff0c;其中包含令人兴奋…