1. 程式人生 > 其它 >JMeter--關聯(正則表示式單個值和多個值)以及實戰

JMeter--關聯(正則表示式單個值和多個值)以及實戰

一、關聯

講關聯之前先熟悉一下後置處理器,因為關聯取的資料就是請求後的資料。
後置處理器:

後置處理器(Post Processors)負責在請求後進行工作。後置處理器常作為處理響應的資料,後置處理器中的正則表示式提取器常常用於提取動態關聯的資料。後置處理器放在請求的子集中。

什麼時候需要關聯?

1.伺服器返回的動態變化而且對業務有影響的需要關聯。

2.回放指令碼看是否正確,檢查下指令碼,是否有動態資料影響

3.一大串字串,每次請求引數是否有變化

4.可以找開發問問,介面是開發做的,最清楚了

動態資料關聯:
1.在HTTP請求的引數中經常會遇到一些引數的值是伺服器的響應中的動態資料,這些資料需要進行關聯才能使得每一次請求都能成功地被伺服器接受,在JMeter中常用正則表示式或者JSON提取器來獲取這些動態資料。
2.正則表示式允許使用者從伺服器響應中獲取資料,作為後置處理器,正則表示式在每個請求執行後再執行。正則表示式提取出來的資料放在變數中,供後續的請求使用。


注意點:

1.取資料 :

從介面的響應中取,要資料,就把該資料括起來 (.*?)

2.不要刪多了,

3.千萬注意看見post,首先要看請求的資料型別,如果是json型別,要加資訊頭管理器

4.介面的入參都是有來源的,1手動輸入(進去的密碼類似於),2從前面的介面的響應中來的(類似於前面新建的學校,然後多出來了id和學校的賬號)。

5.報錯看請求,看有沒有空格,

6.正則表示式一定要放在需要捕捉的頁面裡面,除錯取樣器是放在引用的介面的。

正則表示式提取器:
新增 》 後置處理器 》 正則表示式提取器

  1. 名稱:該節點的名稱,自行定義
  2. 註釋:節點的註釋
  3. Apply to:預設選擇Main sample only,從主請求中獲取資料
  4. 要檢查的響應欄位:響應包含響應行、響應頭、body等,選擇從主體即可。
  5. 引用名稱:正則取出來的資料放在變數中,變數的名稱自己根據實際情況寫,比如:token、id等。把值放在變數中,供後續的請求使用。
  6. 正則表示式:用於解析響應資料的正則表示式。
  7. 模板:取一個數據的模板$1$,取兩個資料的模板$1$$2$。
  8. 匹配數字(0代表隨機):正則取出來的資料可能是多個,0代表隨機一個。
  9. 預設值:正則取不到資料,要展示的資訊。

正則表示式:

  1. .點:匹配任何單個字元,除了\n\r之外
  2. +加號:匹配前面的子表示式一次或者多次
  3. ?問號:當該字元緊跟在任何一個其他限制符(*,+,?)後面時,匹配模式是非貪婪的,非貪婪模式儘可能少地匹配所搜尋的字串
  4. *星號:匹配前面的子表示式任意次
  5. ()小括號:將()之間的表示式定義為“組”,並且將匹配這個表示式的字元儲存到一個臨時區域


舉例:要獲取token的正則表示式為:”token”:”(.+?)”
如果想獲取響應的所有結果使用(.+)即可


二、Jmeter中的關聯元件可以幫助我們從伺服器響應資料中找到我們需要的資料,把想要的資料提取出來。

  1. 寫了個登入指令碼,放回發現登入不成功,然後看了一下請求中的引數,發現post提交的引數中有可疑資料,一排的字母+數字

2.然後通過抓包看每次登入提交的authenticity_token值都不一樣,所以就是這個值需要關聯了

檢視登入頁面原始碼要抓取authenticity_token這個值出來

三、正則表示式抓取資料步驟1.新增正則表示式

2.編寫正則表示式

3.看看正則表示式能否提取出動態的authenticity_token值

提取出來動態的authenticity_token值後,在post協議中把這個值給替換成變數,這樣每次提交的時候這個值就會跟著變化了

然後再次回放指令碼

下面例項講解:
要實現這樣一個功能:新建一個學校,然後再把剛才新建的學校禁用了。
通過抓包工具抓到禁用學校的介面

通過分析,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_1}和${id_2}這兩個。
還有一種情況就是,要取的這兩個值,如果中間的欄位比較多的話,可以使用正則來代替。

這樣也可以實現的,這樣就省去了中間可能要填寫很多字串。