jmeter之json提取器详解

为什么需要json提取器?

  一般来说,通常提取数据我们使用的都是(正则表达式提取),无论任何格式的数据都能提取,属于万能提取器,但一般用作于取值单一数据,就是取值某一个键值对的数据,当然也可以提取多个,但表达式比较繁多复杂

  json提取器用作于返回格式为json格式的数据,语法简单简洁,适用于取值多个键值对数据。

 

json提取器:

  json提取是jmeter自带的,建议不要下载插件。路径为(后置处理器)>(json提取器)

  注意:网上的一些json path解析器最好不要用,最好用jmeter自带的。因为某些网站并不能很好解析json path语法。

 

json提取器功能讲解:

  Apply to:(应用范围)可以参照(正则表达式提取器)

    Main sample and sub-samples:主样本和子样本

    Main sample only:主要样本;一般用这个就行了

    Sub-samples only:仅子样本

    Jmeter Variable Name to use:用作jmeter变量名;可以提取(上一个json提取器中提所取的值),记得写上一个json返回值的变量名,注意不用写格式

 

 

 

  Name of created variables:创建的变量名称,用户自定义,用于储存值,可以多个,用分号(;)进行分隔。

  JSON Path expressions:json path表达式,用户匹配数据,可以填写多个,要求与变量名数量一致,用分号(;)进行分隔。

  Match NO.(0 fon Random):为空的默认值是0,(0代表随机、-1代表所有、其它则从1开始,1则代表取值第1个,2则代表取值第2个,类推。。。)
  Compute conxatenation var (suffix_ALL):该选项如果勾选,则将所有的值用逗号拼接,并保存到一个变量中。注意只有Match NO为 -1 时该功能打钩才有效果。
  Defaylt Values:默认值,用户自定义,可以多个,注意当变量名为多个时,默认值也要求多个,否则无法接口不运行无法查看结果树。

 

 

 

 

Json path语法讲解:

  $    根节点,表示json整个对象。某种意义上来讲 $. 可以省略,但不建议省略,保证语法完整。

  .     点,表示用来连接父、子节点。格式:key.key

  []    下标运算符,根据索引获取元素,也可以用来连接父、子节点。格式key["key2"]

    一般来说,使用 [] 可以提取多个子节点作为一个子JSON对象。格式$["key","key2"]

  ..  递归匹配所有子元素,表示提取所有节点、子节点中符合条件的节点值。格式$..

  *  表示通配,提取所有。

    $.*  表示提取根节点之下的所有节点(儿子)

    $..*  表示提取根节点之下所有子节点(子子孙孙,不限于儿子)

    $.key.key2  key2是一个数组,表示提取key下key2的值,结果是一个数组。

    $.key.key2[*]  表示提取key下的key2中的所有元素的值,结果是一个元素。

  @  表示当前节点,即表示自己。

数组的处理:  

  数组的处理一般来说,可以通过 (下标) 来提取数组元素。$.key.key2[*]

  $.key.key2[自然数],0表示第一个,1表示第2个,以此类推

  可以通过枚举的方式,一次提取多个元素。格式:数组[N1,N2,,,,,,,NN]。示例$key.key2[0,2,3]

 

取数组第一个值:$.key.key2[0]

 

切片:

  格式:[S:E]

  表示提取数组中下标从S开始(包含S),到E(不包含E)结束的所有元素的值。

  示例:$.key.key1[0:2],表示提取$.key.key1[0],$.key.key1[1] 这两个值。

  示例2:$.key.key1[1:3],表示提取$.key.key1[1],$.key.key1[2] 这两个值

 

  S和E可以为空,也可以为负数

    如果S为空,则表示S默认值是0

      示例:$.key.key2[:3], 等价与$.key.key2[0:3]

    如果E为空,则表示取值到最后一个元素(包含)。

      示例:$.key.key2[1:],表示从下标1开始,取值到最后一个元素

    如果S和E是负数,表示倒数第N个元素

      示例:$.key.key2[:-1],表示获取除了最后一个元素以外的所有值,也就是从最后一个开始数,不要最后一个,其余都要。如果是-2,也就是后面开始数,最后2个不要,其余都要

      示例2:$.key.key2[-2:],表示获取最后两个元素的值,如果是-1,则获取最后1个元素。类推

通过切片取第一个值:  $.key.key1[:1]

通过切片取倒数第一个值:$.key.key1[-1:]

 

 

过滤表达式:

  格式:数组[?(过滤表达式)]

    示例:$.key.key2[?(@.key=="values")]、表示获取key 等于“values”的值

       也可以$.key.key2[?(@.key=="values")].key3、表示获取key等于values的值的key3字段值

    示例2:$.key.key2[?(@.key!="values")]、表示获取key 不等于“values”的值

  操作符:==、!=、<、<=、>、>=

    ==  恒等于,要求数据与数据格式一致

    !=  不等于

    <  小于

    <=  小于等于

    >  大于

    >=  大于等于

  操作符2:=~、in、nin、||、&&、subsetof

    =~  正则匹配,也叫模糊匹配,

        示例需求1:查找学生中姓张的学生,则可以写成 $.key.keu2[?(@.name=~/张.*/)]。小知识,这里的*也可以用+代替

        示例需求2:查找学生中姓张的学生,且后面只有1个的字,则可以写成$.key.keu2[?(@.name=~/张.{1}/)],如果是$.key.keu2[?(@.name=~/张.{2}/)],则表示后面有2个字。

    in  存在于

      示例需求:查找学生中年龄等于20或等于25的学生,则可以写成 $.key.keu2[?(@.age in ["20","25"])]。等价于$.key.keu2[?(@.age == "20" || @.age=="25"])]

    nin  不存在于

      示例需求:查找学生中年龄不等于20且不等于25的学生,则可以写成$.key.keu2[?(@.age nin ["20","25"])]。等价于$.key.keu2[?(@.age != "20" && @.age!="25"])]

    ||  或则。上面已经演示了

    &&  并且。上面已经演示了

    subsetof  子集

      示例:$.key.key2[?(@.key subsetof ["key3","key4","key5"])]。表示获取

    

    额外小需求:查询所有科目都及格的学生,则可以写成$.key.key2[?(@.key age.min()>=60)]。age.min是一个数组。

      

到此讲解结束!

 

posted @ 2021-08-08 22:16  博无止境  阅读(1486)  评论(0编辑  收藏  举报