【jmeter参数化--json格式非扁平化(存在嵌套)

原数据 需要参数化数据(参数化call_id、dialog):

预览参数链接

{"call_id": "8cf170ea31c04bd5a8a9ef9d69226045", "dialog": [{"text": "喂?是机主本人吗?借条", "role": "robot"}, {"text": "嗯。", "role": "user"}, {"text": "我看您在我们借条的借款已经发生逾期,一直没扣到,现在已经逾期1天,是怎么回事啊", "role": "robot"}], "label": "无还款诚意"}
{"call_id": "496c147977c7481aaa32e40f667ad3fd", "dialog": [{"text": "喂?是机主本人吗?借条", "role": "robot"}, {"text": "喂,你好。什么借条。", "role": "user"}, {"text": "不好意思,那您要是认识机主,麻烦您转告下他,借条找他,让她给我们借条回电,谢谢啊,再见", "role": "robot"}], "label": "不是本人"}
{"call_id": "2c72f0cf58474651b783139208c94b3e", "dialog": [{"text": "您好,这里是借条,您本期欠款已经逾期2天了,为了不影响您的正常使用,请您务必在今天晚上八点前归还欠款", "role": "robot"}, {"text": "喂,你好。我知道,我忙完了,我开着车呢,我明白我明白。", "role": "user"}], "label": "在忙"}

##带入参数后 json请求体示例:

{
    "trace_id": "07364cee-8c6c-4fff-8709-6dbdd2f619db",
    "call_id": "8cf170ea31c04bd5a8a9ef9d69226045",
    "dialog": [{"text": "喂?是机主本人吗?借条", "role": "robot"}, {"text": "嗯。", "role": "user"}, {"text": "我看您在我们借条的借款已经发生逾期,一直没扣到,现在已经逾期1天,是怎么回事啊", "role": "robot"}]
}

这种 存在嵌套关系的json数据 通过csv是没办法的 因为 csv仅支持扁平化的参数
当然 可以通过 ‘用户参数’ 但是 如果有100条、1000条 甚至更多呢 这种方式变不可取了
在这里插入图片描述

解决办法:

思路
1、把原数据当做请求头发送一个请求
2、利用正则在请求头中 提取想要的数据
3、通过forEach控制器和计数器对提取的参数进行遍历并发送请求

先来一张整体接口图(仅一次控制器不需要 需要使用的话 自行添加):

在这里插入图片描述

步骤一:

1、把原数据存放在一个txt文本或者json文件中 然后存放到jmeter的bin目录下(推荐txt,jsonp怕 正则取不到。 大佬的话就根据自己的喜好来就好啦)
在这里插入图片描述
2、测试计划线面 添加线程组、HTTP信息头管理器
在这里插入图片描述
在这里插入图片描述

3、通过函数助手 读取参数文件 并 写入HTTP信息头管理器中
在这里插入图片描述
在这里插入图片描述
4、线程组下面 随便创建一个请求 (我这里写的百度) 并添加查看结果树
添加-取样器-http请求;添加-监听器-查看结果树
运行 在请求-Request Headers中查看 原数据是否被成功引入
在这里插入图片描述

步骤二:

1、引用成功后 我们使用正则表达式进行数据提取**
添加-后置处理器-正则表达式提取器
添加-取样器-Debug Sampler(取样器)
选择:Request Headers
call_id正则:“call_id”: "(.?)"
dialog:正则:“dialog”: (.
?), “label”:
正则验证:在这里插入图片描述
在这里插入图片描述
清空 在运行一遍脚本 查看是否提取到全部数据
在这里插入图片描述
在这里插入图片描述
到此 想要的数据已经全部提取完成

步骤三:

3、使用提取的变量
添加-逻辑控制器-ForEach控制器
添加-配置原件-计数器(要添加在 ForEach控制器下面)
添加-取样器-http请求(真正要发送的请求)
ForEach控制器只支持一个变量作为输入,如果我们需要使用多个变量作为输入变量,怎么办呢?
其它变量我们可以用__V函数和__counter函数(或计数器)来生成Debug sampler中的变量,__V函数可以处理带有内嵌变量的值,而__counter函数则可以从1递增的生成数字,如果需要设置递增值 __counter函数是不支持的 这种情况可以使用计数器。
在这里插入图片描述
在这里插入图片描述
__V函数使用:函数助手
在这里插入图片描述
V函数 结合计数器写入参数位置
在这里插入图片描述
运行查看请求参数是否全部被正确引用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述踩坑:如果是post请求 传参一定是在消息体数据中 不要在参数里面 否则会urlEncode编码
在这里插入图片描述
在这里插入图片描述
到此 已解决完毕

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值