關聯,在腳本中,是必應用到的一個設置方法,將腳本中,每次都會動態變化的特殊值進行關聯。一個能正確執行的腳本,都需要進行關聯(LR、jmeter)。
Jmeter關聯:
在腳本回放過程中,客戶端發出請求,通過Jmeter中的正則表達式提取器所定義的左右邊界值(也就是關聯規則),在服務器所響應的內容中查找,得到相應的值,以變量的形式替換錄制時的靜態值,從而向服務器發出正確的請求,這種動態獲得服務器響應內容的方法稱作關聯。通俗點說,就是把腳本中某些寫死的(hard-coded)數據,轉變成擷取自服務器所送的、動態的、每次都不一樣的數據。
關聯分兩種,提取單個字符串和多個字符串。
先添加正則表達式提取器,如下所示:
正則表達式提取器:
允許用戶從服務器的響應中通過使用perl的正則表達式提取值。該元素會作用在指定范圍取樣器,用正則表達式提取所需值,生成模板字符串,並將結果存儲到給定的變量名中。
提取單個字符串
假如想匹配Web頁面的如下部分:name="csrf_token" value="d574d4d2c0b9f499"/>並提取d574d4d2c0b9f499。
提取該值,正則表達式寫為:name="csrf_token" value="(.+?)"/>。
將腳本中的相應值改為如下所示即可:
可在正則下添加一個取樣器,如下所示,可以清楚看到正則提取出來的值
運行腳本,可以查看到如下結果:
token=59783be4af34337b
token_g=1
token_g0=name="csrf_token" value="59783be4af34337b"/>
token_g1=59783be4af34337b
提取多個字符串
假如想匹配Web頁面的如下部分:
name="csrf_token" value="d574d4d2c0b9f499"/>並提取csrf_token和d574d4d2c0b9f499。
添加正則提取器,寫入正則表達式,如下所示,正則表達式為:name="(.+?)" value="(.+?)"/>。
這樣就會創建2個組,分別用於$1$和$2$
在參數值地方設置為如下:
運行腳本,查看到的結果如下所示:
引用名稱:token
模板:$1$$2$
如下變量的值將會被設定:
token=csrf_tokenc8cd334fb5197a2a
token_g=2
token_g0=name="csrf_token" value="c8cd334fb5197a2a"/>
token_g1=csrf_token
token_g2=c8cd334fb5197a2a
在需要引用地方可以通過:${ token_g1}, ${ token_g2}進行使用。
說了這么多操作,可能看起來有些地方不明白,也不知道意思,那現在就來點理論補充。
正則表達式提取器詳解:
先看一張圖,就是正則提取器的面板,如下所示:
名稱: 隨意設置, 最好具有業務上的意義, 方便區分
注釋: 隨意設置, 一般不填寫
Apply to: 應用范圍, 包含4個選項。
Main sample and sub-samples: 匹配范圍包括當前父取樣器並覆蓋子取樣器。
Main sample only: 匹配范圍是當前父取樣器(一般默認選擇這個) 。
Sub-samples only: 僅匹配子取樣器。
Jmeter Variable: 支持對Jmeter變量值進行匹配。
要檢查的響應字段: 針對響應數據的不同部分進行匹配, 共七個選項。
主體: 響應數據的主體部分, 排除Header部分; Http協議返回請求的主體部分就是
Body:(一般默認選擇這個)
Body(unescaped) : 針對替換了轉義碼的Body部分。
Body as a Document: 返回內容作為一個文檔進行匹配。
信息頭: 只匹配信息頭部分的內容。
URL: 只匹配URL鏈接。
響應代碼: 匹配響應代碼, 比如狀態碼200代表成功等。
響應信息: 匹配響應信息, 比如”成功” “OK”等。
引用名稱: 即下一個請求要引用的參數名稱, 如填寫token, 則可用${token}引用它。
正則表達式: 正則表達式提取器根據該處的設置進行信息匹配
模板: 用$$引用起來, 如果在正則表達式中有多個正則表達式, 則可以是$1$, $2$等等, 表示解析到的第幾個值給token, $1$表示第一個模板, $0$表示全文匹配。
匹配數字: 用正則表達式匹配的時候, 可能出現多個值的情況, 為正數用來確定取一組值中的第幾個, 為0表示隨機取匹配值, 負數取所有值。
默認值: 如果沒有匹配到可以指定一個默認值。
二次提取:
大家可能對二次提取不理解,看個例子就明白,以百度一下,你就知道舉例:
先獲取到百度首頁的標題,如下所示:
然后再添加一個提取器,如下:
運行腳本,查看結果,如下所示:
這樣就取出百度一下,你就知道,以及一下,你就。
正則表達式匹配注意事項:
如果不能匹配,那么顯示變量名稱,如 ${token}
正則的操作符與含義如下所示:
在提取字符中的正則表達式詳解:
1、引用名稱:下一個請求要引用的參數名稱,如填寫token,則可用${token}引用它。
2、正則表達式:
():括起來的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太貪婪,在找到第一個匹配項后停止。
3、模板:用$$引用起來,如果在正則表達式中有多個正則表達式,則可以是$2$$3$等等,表示解析到的第幾個值給token。如:$1$表示解析到的第1個值
4、匹配數字:0代表隨機取值,1代表全部取值,通常情況下填0
5、缺省值:如果參數沒有取得到值,那默認給一個值讓它取。
在正則表達式中加問號?與不加的區別:
<img src="test.jpg" width="60px" height="80px"/>
正則表達式:<img src="(.+?)"
提取到的值為:test.jpg
正則表達式:<img src="(.+)"
提取到的值為:test.jpg" width="60px" height="80px
這樣一說應該就全明白,希望對大家有所幫助。