濮阳网站制作,湖南网络推广排名,临朐县网站建设,阿里云企业邮箱收费标准简单的jmeter数据请求学习
1.需求
我们的流程服务由原来的workflow-server调用wfms进行了优化#xff0c;将wfms服务操作并入了workflow-server中#xff0c;去除了原来的webservice服务调用形式#xff0c;增加了并发处理#xff0c;现在想测试模拟一下#xff0c;在一…
简单的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/plainheader中带有一个请求systemflag参数用于判定请求系统0信贷 1风险 那么我们的登录接口jmeter设置如下 我们的整体调用ip地址固定所以设置用户自定义全局参数ipvalue值为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 i1;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。。。。。。