首页 > 其他分享 >Jmeter - JsonObject&JsonArray的使用

Jmeter - JsonObject&JsonArray的使用

时间:2022-10-25 19:35:04浏览次数:71  
标签:INFO 25 21 10 JsonArray JsonObject 19 Jmeter BeanShellTestElement

需求背景:重复请求一个接口,提取返回的产品型号,按序打印。当返回的数据有产品型号时才能用JSON提取器提取到结果,当返回的数据没有产品型号时想输出"-",因此采用BeanShell后置处理器

JSON格式如下:

{
  "success": true,
  "code": 0,
  "message": null,
  "body": {
    "items": [
      {
        "isNonStandard": false,
        "productId": 32020,
        "skuNumber": "H37060",
        "manufacturerPartNumber": "CX-444",
        "attributesJson": {
          "种类": "距离设定反射型",
          "输出": "NPN",
          "检测距离": "15~100mm[距离设定100mm时](距离设定范围:20~100mm)",
          "输出动作": "检测时ON/非检测时ON通过切换开关选择",
          "电缆": "2m",
          "描述": ""
        },
        "manufacturer": {
          "id": 80,
          "name": "松下 Panasonic"
        },
        "isActive": true,
        "series": "CX-400",
        "orderCode": "",
        "isBlackCardProduct": true,
        "clearance": true,
        "outofStock": false,
        "packQty": 1,
        "salesPackUom": "个",
        "packUom": "个",
         ....

BealShell后置处理器:

import org.json.*;

String pageIndex = vars.get("pageIndex");
int pageIndexInt = Integer.parseInt(pageIndex);
pageIndexInt++;
//log.info("====================="+ pageIndexInt+"");
vars.put("pageIndex", pageIndexInt+"");

String res = prev.getResponseDataAsString();

//将返回JSON串构建为JSON对象
JSONObject jsonRes = new JSONObject(res);

//获得body JSON 对象,等同于$.body
JSONObject bodyObj = jsonRes.get("body");

//item是一个数组,因此需使用getJSONArray
JSONArray items = bodyObj.getJSONArray("items");


log.info("page:" +${pageIndex} + "============产品名称============");
for (JSONObject item: items) {
	JSONObject attributesJsonObject = item.get("attributesJson");
	if (null != attributesJsonObject) {
		if (attributesJsonObject.has("产品名称")) {
			String name = attributesJsonObject.getString("产品名称");
			if (null != name) {
				log.info(name);
			}
		} else {
			log.info("-");
		}
	}
}




//编码
log.info("page:" +${pageIndex} +"============型号============");
for(int x=1; x<=12;x++){
	skuNumber =  vars.get("skuNumber_" + x);
	log.info(skuNumber);
}

//系列名称
log.info("page:" +${pageIndex} +"============系列名称============");
for(int x=1; x<=12;x++){
	serialName2 =  vars.get("serialName2_" + x);
	log.info(serialName2);
}


//最小起购量
log.info("page:" +${pageIndex} +"============最小起购量============");
for(int x=1; x<=12;x++){
	packQty =  vars.get("packQty_" + x);
	salesPackUom =  vars.get("salesPackUom_" + x);
	log.info(packQty+salesPackUom);
}


//价格
log.info("page:" +${pageIndex} +"============价格============");
for(int x=1; x<=12; x++){
	price =  vars.get("price2_" + x);
	log.info(price);
}

结果:

2022-10-25 19:21:19,338 INFO o.a.j.u.BeanShellTestElement: page:4============产品名称============
2022-10-25 19:21:19,338 INFO o.a.j.u.BeanShellTestElement: A6 伺服电机
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: -
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: -
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: -
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: -
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: -
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: -
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: 光纤头
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: CPU单元
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: 电池
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: FP-X功能插件
2022-10-25 19:21:19,339 INFO o.a.j.u.BeanShellTestElement: -

遇到的坑:
1.BeanShell 中使用data 作为变量的名称,导致报错:Variable assignment: data: Can't assign byte [] to java.lang.String

解决:data是Jmeter内置的变量名称,因此不能使用换个变量名即可

参考了一下写的较好的文章:

http://t.zoukankan.com/nieliangcai-p-10535194.html
https://blog.csdn.net/henry_lin_wind/article/details/83345555
https://blog.csdn.net/qq_48607414/article/details/125741047

标签:INFO,25,21,10,JsonArray,JsonObject,19,Jmeter,BeanShellTestElement
From: https://www.cnblogs.com/czzz/p/16826015.html

相关文章

  • jmeter常用的prev方法
    prev提供对当前取样器结果的访问能力prev映射org.apache.jmeter.samplers的SampleResult类官方文档:https://jmeter.apache.org/api/org/apache/jmeter/samplers/Sam......
  • jmeter-beanshell 常见报错
    1.Typedvariabledeclaration说明:这个错误不会指明哪行那个地方报错,不明白的不好找;一般是指代变量赋值格式不支持,不正确,可以从变量定义或者赋值去排查有可能是JAVA兼容......
  • 05Jmeter之变量定义
    1. 测试计划定义变量引用:${user}   也可使用中文做变量 2.用户参数定义变量引用:${user}   也可使用中文做变量 3.用户定义的变量 引用:${user}  ......
  • 04Jmeter之乱码问题
    在使用Jmeter时会出现乱码问题。实际是编码问题,jmeter默认按照ISO-8859-1编码格式进行解析,总结以下解决方法: 方法一:BeanShell取样器添加取样器:BeanShell取样器:输入p......
  • JSONObject.parseObject接收map
    com.alibaba.fastjson.JSONObjectobj=newcom.alibaba.fastjson.JSONObject();obj.put("a1","tom");obj.put("a2","linly");obj.put("a3","Eric");obj.put("a......
  • 使用Docker进行Jmeter分布式压测
      一、概述单个 JMeter 实例可能无法产生足够的负载来对应用程序进行压力测试,就如jmeter[官网所示][https://jmeter.apache.org/usermanual/remote-test.html],一......
  • 02Jmeter之Jmeter入门
    一、JMETER目录结构 bin:该目录存放的是Jmeter的主jar、相关的启动脚本、配置文件和日志文件等a) examples目录中有CSV样例b) jmeter.batwindows的启动文件c)......
  • jmeter组件:JSON Extractor
    Namesofcreatedvariables:参数名JsonPathexpressions:json提取表达式MatchNo:匹配数字,0表示随机匹配DefaultValues:默认值,有几个参数就要写几个......
  • jmeter中获取token和cookie
     ##登录获取token1.添加请求1.1输入接口中需要携带的参数的值   2.正则表达式提取器提取出值   3.输入token数据   "token":"(.+?)"......
  • Jmeter-3.Json提取器处理上下游传参(例如获取的token给下游使用)
    需要提取哪个请求产生的值,就在哪个请求上添加,例如在获取token的请求上,右键,添加--后置处理器--Json提取器  下游需要用的时候通过${}引用,例如添加会议室需要token ......