Jmeter關聯詳解

EdisonYao發表於2021-08-02

關聯的概念

  從上一步操作中獲取需要的值,傳遞給下一步操作中進行引用,形成自動關聯,而不是

每次操作都去手動修改關聯的值。常見的場景有SessionID、Session Token值的獲取。

正規表示式提取器

正則基礎

  正規表示式(Regular Expression):使用正規表示式解析響應結果,“()”表示提取字

符串中的部分值,請不要使用“||”,除非你本身需要匹配這個字元。

常用的正規表示式操作符:

操作符

說明

例項

.

匹配除“\r\n”之外的任何單個字元。

 

[]

字符集,對單個字元給出範圍

[abc] 表示非a、b、c,[a-z]表示a-z的單個字元

[^ ]

非字符集,對單個字元給出排除範圍

[^abc] 表示非a或b或c的單個字元

*

前一個字元零次或無限次擴充套件

abc* 表示ab、abc、abcc、abccc等

+

前一個字元1次或無限次擴充套件

abc+ 表示abc、abcc、abccc等

前一個字元0次或1次擴充套件

abc? 表示ab、abc

|

左右表示式的任意一個

abc|def 表示abc、def

{m}

擴充套件前一個字元m次

ab{2}c 表示abbc

{m,n}

擴充套件前一個字元m到n次 

 ab{1,2}c 表示abc、abbc

^

 匹配字串開頭

^abc 表示abc且在一個字串的開頭 

$

 匹配字串結尾

abc$ 表示abc且在一個字串的結尾 

()

分組標記內部只能使用|操作符 

(abc) 表示abc,(abc|def)表示abc、def

\d

數字,等價於0-9

 

\w

單詞字元,等價於[a-z0-9A-Z_]

 

常用組合:

.*具有貪婪的性質,匹配到不能匹配為止,最大匹配原則。

+或*後跟?表示非貪婪匹配,即儘可能少的匹配,最小匹配原則。

.*? 表示在能匹配成功的前提下儘可能少的匹配,最小匹配原則。

 

Name:元件的名字,可以自定義

Comments:註釋

Apply to:一般保持預設選擇Main sample only即可

Field to check:要檢查的響應欄位,比較常用的是Body

Name of created variable:引用名稱,即變數名,將獲取到的值儲存在這個變數中

Regular Expression:正規表示式,根據要抓取的內容編寫

Template:模板,$1$表示第一個正規表示式,如果有2個模板,則填入$1$$2$

Match No.(0 for Random):匹配數字(0代表隨機),一般填1,表示第一個,0表示隨機,-1表示全部

(此時提取結果是一個陣列,如果引用名稱是user,也可以通過${user_1}的方式來取第1個匹配的內容)

Default Value:預設值,沒匹配到就使用該值,如填入一個Test

實際運用

  工作場景:有兩個介面,分別可以獲取到城市程式碼和城市天氣,查詢城市天氣的介面需要將

獲取到的城市程式碼作為引數傳入。

查詢城市程式碼介面:http://toy1.weather.com.cn/search?cityname=shanghai

查詢城市天氣介面:http://www.weather.com.cn/data/cityinfo/101020100.html

  接下來,我們需要使用正規表示式提取器來實現兩個介面的關聯,先抓取到城市程式碼儲存到

一個變數中,然後在查詢城市天氣介面中引用該變數。

  在Jmeter中建立http請求,配置好查詢城市程式碼介面,新增檢視結果樹。

  新增正規表示式提取器,抓取需要的引數。

  新增查詢城市天氣介面,城市程式碼引用上一步提取的引數,檢視響應結果。

 JSON Path Extractor提取器

基礎簡介

  對於需要從介面返回為JSON的結果中提取內容,然後作為變數在不同的請求中傳遞,JSON Path Extractor

提取器可以說是非常好用。對於JSONPath不太熟悉的同學,建議在使用該元件前先去官網學習一下相關內容。

JSONPath官網:https://goessner.net/articles/JsonPath/

先看一下JSONPath語法與其對應的XPath概述和比較。

XPath JSON路徑 描述
/ $ 根物件/元素
. @ 當前物件/元素
/ 或者 [] 子運算子
.. 不適用 父運算子
// .. 遞迴下降。JSONPath 從 E4X 借用了此語法。
* * 萬用字元。所有物件/元素,無論其名稱。
@ 不適用 屬性訪問。JSON 結構沒有屬性。
[] [] 下標運算子。XPath 使用它來迭代元素集合和謂詞在 Javascript 和 JSON 中,它是本機陣列運算子。
| [,] XPath 中的聯合運算子導致節點集的組合。JSONPath 允許將備用名稱或陣列索引作為一個集合。
不適用 [開始:結束:步驟] 從 ES4 借來的陣列切片運算子。
[] ?() 應用過濾器(指令碼)表示式。
不適用 () 指令碼表示式,使用底層指令碼引擎。
() 不適用 在 Xpath 中分組

  在jmeter裡使用此元件,需要安裝對應的JMeterPlugins-ExtrasLibs外掛。下載完成,將

jar包放入jmeter安裝目錄lib\ext中,然後重啟jmeter。

連結: https://pan.baidu.com/s/1vh9IL9tgwDsSYl2dShgbsw

提取碼: 7kgh

Destination Variable Name:要儲存的變數名稱

JSONPath Expression:JSON表示式

Default Value:預設值,未取到結果使用該值

實際運用

1.當返回值為JSON時,JSON表示式為 $.userSession.sessionId 

{
    "userSession": {
        "businessCode": "900000",
        "createTime": "2018-05-25 03:24:17",
        "userCode": "29feaa3c98014e02bec16c6f448a6459",
        "userName": "lip-vpn",
        "sessionId": "10a4cee035d044d8b2f25e2cebb2843e"
    }
}

在jmeter中新增JSON Path Extractor,然後用結果樹檢視輸出,配置如下:

2.當返回值為陣列時,需要加上陣列的位置,JSON表示式為 $.userSession[0].sessionId 

{
    "userSession": [
        {
            "businessCode": "900000",
            "createTime": "2018-05-25 03:24:17",
            "userCode": "29feaa3c98014e02bec16c6f448a6459",
            "userName": "lip-vpn",
            "sessionId": "10a4cee035d044d8b2f25e2cebb2843e"
        }
    ]
}

在jmeter中新增JSON Path Extractor,然後用結果樹檢視輸出,配置如下:

 

相關文章