Jmeter——關聯(正則表達式)


 關聯,在腳本中,是必應用到的一個設置方法,將腳本中,每次都會動態變化的特殊值進行關聯。一個能正確執行的腳本,都需要進行關聯(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

這樣一說應該就全明白,希望對大家有所幫助。

 


免責聲明!

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



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