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是一個數組。

      

到此講解結束!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM