1、添加正则表达式提取器
在http请求下,添加正则表达式提取器,如图
说明
(1)引用名称:下一个请求要引用的参数名称,如填写Data,则可用${Data}引用它
(2)正则表达式:
() :括起来的部分就是要提取的
. :匹配任何字符串 +:一次或多次
?:不要太贪婪,在找到第一个匹配项后停止
(3)模板:用$$引用起来$1$表示解析到的第1个值
如果有多个值,就添加多个:$1$$2$
模板设置,可以拼接其它字符,如:$1$-----$2$
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
场景1:接口返回的是json格式
如下
{
"Code": 200,
"Data": "E944883D4BBEC7",
"Msg": "success",
"device": "csacsdc65564aa",
"response": [
"14546523321",
"45645454"
]
}
此时正则表达式匹配时,jemeter是一行一行查找匹配的。
不能一个正则表达式匹配多行。
正则如下:
"Data": "(.+?)"--------匹配结果为:E944883D4BBEC7
"Code": (.+),--------匹配结果为:200
"Code": (.+) -------- 匹配结果为:200,
验证配置的正则是否正确
通过添加:查看结果树,接口返回的结果的response内容,输入编写的正则表达式,点击“find”,如果能查询预期的结果,表示输入的正则正确。如图
场景2:接口返回的是字符串格式
结果
{'Code': 200, 'Msg': 'success', 'Data': 'E944883D4BBEC7', 'device': 'csacsdc65564aa', 'response': ['14546523321', '45645454']}
此时正则表达式匹配时,jemeter认为结果为一行,可以匹配多个字段。
正则为----------'Data': '(.+?)', 'device': '(.+?)'
模板:可以输入自己想要拼接的字符 :$1$----$2$
设置的请求为:
结果为: http://127.0.0.1:5000/E944883D4BBEC7---csacsdc65564aa?data=E944883D4BBEC7---csacsdc65564aa
变量pa为正则表达式配置的结果:E944883D4BBEC7---csacsdc65564aa
还会生成变量pa_1:匹配的第一组数据:E944883D4BBEC7
还会生成变量pa_2:匹配的第二组数据:csacsdc65564aa
提取的数据,可以增加 调试取样器(Debug Sampler)查看