一、需求背景
串行接口A、B、C,接口B和接口C的请求参数依赖于接口A的返回参数,在接口A的返回值中,参数是包含在value中的;
举个例子:
接口A的返回参数
{
"url":"http://www.baidu.com/patient/todosPage?projectId=aaaaa&phaseId=12345&taskId=6789"
}
恰好接口B和接口C分别需要参数中的projectId、phaseId、taskId,那么这个时候怎么提取参数呢?
有两种方法:
- 在jmeter中通过BeanShell编写脚本提取value
- 通过正则表达式提取value
以下介绍的是如何通过正则表达式提取参数的过程。
注:正则表达式的语法可查看教程:正则表达式 - 语法
二、jmeter中添加正则表达式提取器
-
在「后置处理器」中选择「正则表达式提取器」,如图
-
提取器中每个字段代表什么?
模块一:
Apply to 提取数据的接口对象- main sample and sub-samples:对所有主请求和子请求生效
- main sample only:只对主请求生效(默认选这个)
- sub-samples only:只对子请求生效
- jmeter variable name to use:对jmeter变量生效(在测试计划定义变量,在这用)
模块二:
- 主体:响应体(默认选这个)
- Body(unescaped):无符号响应体,会自动忽略特殊字符,功能不稳定,一般不用
- body as a document:响应体,会以文件形式存在(在互联网传输的接口数据都是文件),性能差
- 信息头:响应头
- request headers:请求头
- url:请求的url
- 响应代码:响应状态码
- 响应信息:响应状态码的信息
模块三
- 引用名称:就是匹配成功后,保存数据的变量名
- 正则表达式:以下是正则表达式中常用的符号
()
:要提取的内容.
:匹配任意单个字符串*
: 匹配(*之前的符号)0次或多次+
:匹配(+之前的符号)1次或多次?
:不要太贪婪,在找到第一个匹配项后停止.*
:匹配连续0个/多个字符.+
:匹配连续1个/多个字符\
:转义,.表示匹配字符.本身
- 模板:正则表达式中每有一个括号就相当于一个模板
$0$
则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容$1$
代表提取第一个正则表达式的数据$2$
则是第二个正则表达式的数据
- 匹配数字:
- 0代表随机选择一组
- 1代表选择第一组
- 2代表选择第二组
- 为负数时代表选择全部数据,如-1
- 缺省值:当匹配失效时,保存到引用名称的