1.正則表達式提取器的業務場景
如果有這樣的情況:一個完整的操作流程,需要先完成某個操作,獲得某個值或數據信息,然后才能進行下一步的操作(也就是常說的關聯/將上一個請求的響應結果作為下一個請求的參數);
如在token的請求流程中,客戶端輸入賬號與密碼登錄到服務端,服務端會返回一個tokenID給客戶端,客戶端需要進行下一步操作時需要提供tokenID給服務端
在Jmeter中,可以利用正則表達式提取器與JSON提取器來幫助我們完成這一動作。
JSON提取器之前以及分享過了,傳送門:https://www.cnblogs.com/teangtang/p/15796079.html,這里我們只演示正則表達式提取器
2.正則表達式提取器

2.1正則表達式操作符
字符 | 作用 |
---|---|
$ | 匹配輸入字符串的結尾位置。 |
() | 標記一個子表達式的開始和結束位置。子表達式可以獲取供以后使用。 |
* | 匹配前面的子表達式零次或多次。 |
+ | 配前面的子表達式一次或多次。 |
. | 匹配除換行符 \n 之外的任何單字符。 |
? | 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。 |
|將下一個字符標記為或特殊字符、或原義字符。 | |
^ | 匹配輸入字符串的開始位置。 |
\w | 匹配字母、數字、下划線或漢字 |
{n} | n 是一個非負整數。匹配確定的 n 次。 |
{n,} | n 是一個非負整數。至少匹配n 次。 |
{n,m} | m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
貪婪匹配和非貪婪匹配 | |
*、+限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的后面加上一個?就可以實現非貪婪或最小匹配。 |
案例
例如我們要取出下面的數據
{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOiJRZVh2MlJLZFE4eVF1eWIyNFdSbVY5IiwiZXhwIjoxNjQyNTk0NTkzfQ.FCCsG4domXHZCzyb192pNJTZB-Nw2ae57IExnbpkTa8", "user": { "uid": "QeXv2RKdQ8yQuyb24WRmV9", "telephone": "15227132986", "username": "特昂糖", "email": null, "avator": "", "date_joined": "2022-01-09T11:12:25.772118+08:00", "is_active": true } }
正則表達式 |
取到的值 |
"token":"(.*?)" |
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOiJRZVh2MlJLZFE4eVF1eWIyNFdSbVY5IiwiZXhwIjoxNjQyNTk0NTkzfQ.FCCsG4domXHZCzyb192pNJTZB-Nw2ae57IExnbpkTa8" |
"uid":"(.*?)" |
"uid": "QeXv2RKdQ8yQuyb24WRmV9" |
"telephone":"(.*?)" |
"telephone": "15227132986" |
"date_joined":"(.*?)" |
"date_joined": "2022-01-09T11:12:25.772118+08:00" |
"username":"(.*?)" |
"username": "特昂糖" |
"email":"(.*?)" |
"email": null |
"avator":"(.*?)" |
"avator": "" |
"is_active":"(.*?)" |
"is_active": true |
這里可以給大家分享一個正則表達式測試的地址:https://tool.oschina.net/regex
2.2模板
⽤$$引⽤起來,如果在正則表達式中有多個正則表達式(多個括號括起來的東東),則可以是$2$, $3$等等,表示解析到的第⼏個值給user_id。例如:$1$表示匹配到的第⼀個值
$1$表示解析到的第1個值
2.3匹配數字
0代表隨機取值,-1代表所有值,此時提取結果是⼀個數組,其余正整數代表第⼏個匹配的內容提 取出來。如果匹配數字選擇的是-1,還可以通過 {user_id_2}來取第2 個匹配的內容。
2.4缺省值
如果參數沒有取得到值,那默認給一個值讓它取。可填可不填,看具體使用場景