jmeter正则表达式提取多个值
在使用JMeter进行性能测试时,有时候需要从响应结果中提取出多个值进行后续的处理,比如进行断言或者断言结果比较、赋值给变量进行使用等等。在JMeter中,可以使用正则表达式来提取多个值。本文将介绍如何在JMeter中使用正则表达式提取多个值。
需要的工具
在使用JMeter提取多个值之前,需要先安装插件RegexExtractor和JSON Extractor。这两个插件都是JMeter自带的插件,如果你已经安装了JMeter,那么这两个插件就会自动安装。
正则表达式提取多个值
下面是一个示例请求的响应结果:
{
"id": 123,
"name": "Tom",
"gender": "male",
"age": 25
}
我们需要从上面的响应结果中提取出id、name和age这三个值。此时,可以使用JSON Extractor来提取出这三个值。
首先,在请求中添加JSON Extractor。点击HTTP请求中的“添加”按钮,在出现的下拉菜单中选择“Post Processor” -> “JSON Extractor”。
接着,在JSON Extractor中添加如下配置:
- 名称(Name):任意取一个名字,比如“extractor”
- JSON路径表达式(JSON Path expressions):分别输入“.id”、“.name”、“$.age”
- 默认值(Default Values):为空
- 处理空值(Handle Empty Value):勾选“否”
最终的JSON Extractor配置如下所示:
JSON Extractor
名称:extractor
JSON路径表达式:
- .id
-.name
- $.age
默认值:空
处理空值:否
如上配置完成以后,点击保存按钮即可。
接着,我们需要使用正则表达式提取出这三个值。正则表达式的语法比较复杂,在此不再赘述。下面是提取正则表达式的示例代码:
"id\":\s*(\d+),\"name\":\s*\"(\w+)\",\"age\":\s*(\d+)
以上正则表达式可以提取出响应结果中的id、name和age。
接下来,我们需要在HTTP请求中添加正则表达式提取器(Regular Expression Extractor)。点击HTTP请求中的“添加”按钮,在出现的下拉菜单中选择“Post Processor” -> “Regular Expression Extractor”。
在正则表达式提取器中添加如下配置:
- 名称(Name):任意取一个名字,比如“regex”
- 正则表达式(Regular Expression):使用上面提取正则表达式的代码
- 模板(Template):1,2,3
- 匹配号(Match No.):-1
- 默认值(Default Values):为空
最终的正则表达式提取器配置如下所示:
正则表达式提取器
名称:regex
正则表达式:\"id\":\s*(\d+),\"name\":\s*\"(\w+)\",\"age\":\s*(\d+)
模板:1,2,3
匹配号:-1
默认值:空
如上配置完成以后,点击保存按钮即可。
最后,我们需要在断言或者其他地方使用提取出来的值,可以使用JMeter内置变量函数${}来获取提取出来的值。比如,在检查点中可以使用:
- ${extractor_1} 提取出的第一个值
- ${extractor_2} 提取出的第二个值
- ${extractor_3} 提取出的第三个值
结论
使用JMeter提取多个值有两种方式,一种是使用JSON Extractor,另一种是使用正则表达式提取器。JSON Extractor适用于从JSON格式的响应结果中提取多个值,而正则表达式提取器适用于提取任意格式的响应结果中的多个值。在使用之前需要先安装对应的插件,配置完成后可以使用JMeter内置变量函数${}来获取提取出来的值。