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