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缺省值
如果参数没有取得到值,那默认给一个值让它取。可填可不填,看具体使用场景