应用场景:
在实际运用过程中,我们经常需要会遇到B请求需要使用A请求返回的数据,将上一个请求响应的结果作为下一个请求的参数,例如token,这个时候我们就要用到提取器来提取数据,Jmeter工具自带了Json提取器 和 正则表达式提取器,这次主要是使用正则表达式提取器来提取数据
正则表达式主要用于:
1.字符串的匹配、提取处理
2.regular这个单词表示正则表达式的意思
正则表达式学习链接:
https://www.cnblogs.com/Simple-Small/p/9150947.html
正则表达式手册:
https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
一、提取步骤如下:
1、新建请求A(示例:登录请求)
第一步:添加线程组
第二步:在当前线程组下添加HTTP请求
第三步:完善当前请求参数和请求头,并添加察看结果树来查看响应结果
2、查看提取的表达式与提取数据是否正确
- 选择RegExp Tester
- 输入提取表达式,提取想要的参数,例如在登录接口返回的数据中,要提取access_token ,
- 提取表达式为:“access_token”:"(.+?)"
- 可以看到已经提取到access_token数据
- 如果有多个参数需要提取的,用逗号(,)进行分隔区分,如图
3、通过正则表达式提取
- 添加正则表达式提取器
- 填写参数
- 参数说明:
1)引用名称:下一个请求要引用的参数名称,如填写access_token,则可用${__P(access_token,)}引用2)正则表达式:例如:"access_token":"(.+?)"():其中括起来的这部分就是要提取的.:一个点表示匹配除“\n”之外的任何单个字符。(\n表示换行符)+:+号表示匹配前一个字符,1次或者多次?:表示非贪婪模式,找到一个匹配的数据就停止;贪婪模式,去掉?号就可以,表示将所有符合的数据都提取出来3)模板:用$$引用起来,$1$表示解析到的第1个值(如果有多个值,就添加多个:$1$$2$),以此类推:取一个值的时候:Match count: 1 --有一个值Match[1][0]="access_token":"5c25ad54-a345-4828-9d01-b3739821416c"Match[1][1]=5c25ad54-a345-4828-9d01-b3739821416c --取到的第一个值取多个值的时候: "authorityId":"(.+?)"Match count: 439 --有439个值Match[1][0]="authorityId":"2757" Match[1][1]=2757 --取到的第一个值Match[2][0]="authorityId":"4325" Match[2][1]=4325 --取到的第二个值Match[3][0]="authorityId":"2185" Match[3][1]=2185 --取到的第三个值4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
4、B请求调用从A请求提取的数据*
- 使用函数助手的p函数去生成当前的参数并调用:${__P(access_token,)}
- 可以看到B请求的请求参数已经获取从A请求的响应中获取到了
- 响应成功
二、正则表达式的举例说明如下
1、提取单个参数
- “access_token”:"(.+?)"
2、多个参数提取
1.“access_token”:"(.+?)",“applicationId”:"(.+?)"