• JMeter----正则表达式&JSON Path Extractor


    最近在用JMerter给公司一个项目做性能测试,期间遇到要提取上一个接口返回的数据作为下个接口的请求。这里做下记录

    如图所示,需要将“扫描二维码”接口请求的返回值中的data部分,作为“处理提交码值”接口的参数传递给服务器。

    首先我想到的是利用正则表达式,直接把整个data部分提取出来,

    嗯,没错,是不是觉得一步就搞定了,还说个毛线。

    但是.............

    坑爹的是,服务端在接收data数据的时候,要对data数据做处理

    首先,data以数组的形式传参(有可能一次提交多个码),

    其次,data数组里边嵌套字典的形式,但是我传给服务端需要把""转义。。。(这里真的想吐血,请教下各位大佬,这种情况服务端不能做处理吗)

    结果,要传递的值大概就是下面呈现的形式:(懵逼....)

    所以,之前把整个data部分取出来的想法pass了。。。

    好吧,我另辟蹊径,想着把每个参数单独取出来,下个接口在body里边先把"做成",先转义,再把值引用进来(像是抠图一样的赶脚...)

    说完就干,前面几个参数取值都OK,没什么难度,取boxList的时候有点犯难,这个参数前后一般都是","符号,没有明显的标志。

    查了度娘,找了一种方法来取值:

    把整个boxList全部取值(共6个),再用匹配数字去取第几个值。

    这里有个小插曲,开始以为可以用【模板】里边的$1$这种去匹配表达式里边的6个取值,后面接口再用boxList_1、boxList_2........boxList_6来引用。后面发现不行...

    【模板】$1$$2$代表的是,正则表达式中有多个提取式(多个括号里边的东东),第一个取值和第二个取值怎么组合形式

    比如:正则表达式提取出来两个值,一个是lixiaoming,一个是24,如果【模板】写成$1$$2$,那么后面应用的时候,这个参数展现就是“lixiaoming24”(中间可以加其他连接符,有时候取多个值,再以某种形式组合成一个参数,这种可能会用到)

    好,值取出来了。然后添加了6个正则提取器(请教大佬,这种后置处理器添加太多,对性能测试本身会有多大影响呢)

    大致的形式就是这样的:(....我也很无奈...)

    后面接口,用boxList1....boxList6引用,OK,没问题。

    后面经理给我说有一个叫JSON Path Extractor的插件,用来提取服务器返回的json中的数据很好用。(what?!居然之前没有使用过这等插件)

    马上相会度娘,找了几篇测友发的经验之谈,哇靠,果真简单粗暴....

    马上招来玩玩,啊呸,马上学些学习~

    下载了插件,然后学着写提取表达式

    data里边的数据可以看做是字典里边嵌套数组的形式,操作字典引用key,数组的话用索引去取值

    于是表达式为:$.data.boxList[0]

    另外,网上也找了另一种,data是数组里边嵌套字典的,学习学习

    提取id的表达式为:$.data[0].id

    OK,新方法果然比正则表达式好用(自我觉得),而且也比较好理解

    另外,在添加了正则表达式,JSON Path Extractor等提取器,想查看表达式写的是否正确,提取的内容是否正确。"查看结果树"可以做到

    在结果树中选择“RegExp Tester”,输入你写的正则表达式,就能知道正则是否写正确了。

    同理,JSON Path Extractor一样

     OK,写完了。这次还是有不少收获,后面再对JMeter系统学习学习。

    如果文中有些错误点,希望各位大佬及时指出,定虚心接受~

    一步一步走进代码的世界...
  • 相关阅读:
    并发控制-CycliBarrier
    并发控制-条件对象(Condition接口)
    并发控制-信号量(Semaphore)
    控制并发-CountDownLatch
    控制并发流程
    [杂谈]重新认识RDD
    【杂谈】RDD-运行-2
    【杂谈】RDD-依赖
    [杂谈]Executor-1
    [杂谈]Rdd运行-1
  • 原文地址:https://www.cnblogs.com/liyanze-z/p/8668922.html
Copyright © 2020-2023  润新知