關聯的概念
從上一步操作中獲取需要的值,傳遞給下一步操作中進行引用,形成自動關聯,而不是
每次操作都去手動修改關聯的值。常見的場景有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,然後用結果樹檢視輸出,配置如下: