Jmeter關聯正則表示式
一、關聯
講關聯之前先熟悉一下後置處理器,因為關聯取的資料就是請求後的資料。
後置處理器:
後置處理器(Post Processors)負責在請求後進行工作。後置處理器常作為處理響應的資料,後置處理器中的正則表示式提取器常常用於提取動態關聯的資料。後置處理器放在請求的子集中。
什麼時候需要關聯?
1.伺服器返回的動態變化而且對業務有影響的需要關聯。
2.回放指令碼看是否正確,檢查下指令碼,是否有動態資料影響
3.一大串字串,每次請求引數是否有變化
4.可以找開發問問,介面是開發做的,最清楚了
動態資料關聯:
1.在HTTP請求的引數中經常會遇到一些引數的值是伺服器的響應中的動態資料,這些資料需要進行關聯才能使得每一次請求都能成功地被伺服器接受,在JMeter中常用正則表示式或者JSON提取器來獲取這些動態資料。
2.正則表示式允許使用者從伺服器響應中獲取資料,作為後置處理器,正則表示式在每個請求執行後再執行。正則表示式提取出來的資料放在變數中,供後續的請求使用。
正則表示式提取器:
新增 》 後置處理器 》 正則表示式提取器
- 名稱:該節點的名稱,自行定義
- 註釋:節點的註釋
- Apply to:預設選擇Main sample only,從主請求中獲取資料
- 要檢查的響應欄位:響應包含響應行、響應頭、body等,選擇從主體即可。
- 引用名稱:正則取出來的資料放在變數中,變數的名稱自己根據實際情況寫,比如:token、id等。把值放在變數中,供後續的請求使用。
- 正則表示式:用於解析響應資料的正則表示式。
- 模板:取一個數據的模板$1$,取兩個資料的模板$1$$2$。
- 匹配數字(0代表隨機):正則取出來的資料可能是多個,0代表隨機一個。
- 預設值:正則取不到資料,要展示的資訊。
正則表示式:
- .點:匹配任何單個字元,除了\n\r之外
- +加號:匹配前面的子表示式一次或者多次
- ?問號:當該字元緊跟在任何一個其他限制符(*,+,?)後面時,匹配模式是非貪婪的,非貪婪模式儘可能少地匹配所搜尋的字串
- *星號:匹配前面的子表示式任意次
- ()小括號:將()之間的表示式定義為“組”,並且將匹配這個表示式的字元儲存到一個臨時區域
舉例:要獲取token的正則表示式為:”token”:”(.+?)”
如果想獲取響應的所有結果使用(.+)即可
例項講解:
要實現這樣一個功能:新建一個學校,然後再把剛才新建的學校禁用了。
通過抓包工具抓到禁用學校的介面
通過分析,id和schoolid則為禁用那個學校的欄位,而這兩個值一般都會在禁用介面前面的介面中獲取的。在列表頁的介面中可以看到
所以只需要把列表頁介面的響應中的這兩個資料取出來,然後供給禁用的介面使用,就能實現:新建一個學校,然後把新建的學校禁用了。
分開取資料,先取id:
加一個除錯取樣器,在檢視結果樹好檢視正則表示式有沒有取出資料。
如果裡面有特殊字元,根據實際情況需要進行轉義:
把id取出來了。
接下來取schoolid,一樣的方法。
在檢視結果樹中看到schoolid取出來了。
把取出來的id和schoolid引用到禁用學校的介面即可。
通過 ${變數名}把取出來的值引用過來。
到此即可實現,新建一個學校,然後把剛新建的學校禁用。
可以到頁面上看效果。
正則表示式取多個值:
介面的響應
{"code":1,"message":"","costTime":0,"data":[{"id":386739,"schoolId":449,"laccount":null,"pwd":null,"loginTime":null,"loginTotal":null,"islogin":null,"disable":"0","isadmin":null}],"start":0,"page":0,"total":0}
應取這個介面中code對應的值1和costTime對應的值0這兩個資料。
在檢視結果樹中看一下結果:
引用的時候要注意,引用的是${id_g1}
和${id_g2}
這兩個。
還有一種情況就是,要取的這兩個值,如果中間的欄位比較多的話,可以使用正則來代替。
這樣也可以實現的,這樣就省去了中間可能要填寫很多字串。