关于jmeter正则表达式的一个实际应用
接口响应内容如下
{ "code": 200, "msg": "成功", "data": { "projectId": 178, "type": 5, "data": "[{\"ioType\":1,\"type\":0,\"id\":115},
{\"ioType\":1,\"type\":1,\"id\":1361},
{\"ioType\":1,\"type\":2,\"id\":1362},
{\"ioType\":1,\"type\":3,\"id\":1363},
{\"ioType\":2,\"type\":6,\"id\":1838},
{\"ioType\":2,\"type\":1,\"id\":1839},
{\"ioType\":2,\"type\":4,\"id\":1840},
{\"ioType\":2,\"type\":3,\"id\":1841},
{\"ioType\":2,\"type\":2,\"id\":1842}]", "current": "1" } }
本次要提取的是 {\"ioType\":2,\"type\":6,\"id\":1838} 中的 id 值,也就是当前示例中的1838
开始打算使用json提取器来逐级提取,但是发现内层data的值并不是一个列表,而是一个字符串(列表被一个引号包裹住了),这样就无法使用json提取器了
所以决定使用正则表示提取器来试试(这里的关键是确保书写的正则表达式是正确的)
注意⚠️:
通过观察 {\"ioType\":2,\"type\":6,\"id\":1838} 可以看到每个 " 前都有一个 \
所以在写表达式时需要转义一下它,不然会识别不出来。。。
方法也很简单,在 \ 前,再加一个 \ 即可
这样的话,正则表达式可以如下
正则表达式:{\\"ioType\\":2,\\"type\\":6,\\"id\\":(\d*)}
因为每个响应中都有【\\"ioType\\":2,\\"type\\":6】,所以这里可以写死,然后提取对应的id值即可
模版:$1$
因为这个表达式只有一个分组(正则表达式中一个括号表示一个分组),所以这里写1就行,表示引用组1
ps. 引用组的语法是:$1$引用组1,$2$引用组2。$0$引用整个表达式匹配的内容
匹配数字:1
正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素;
-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
要验证正则表达式的提取结果,可以添加一个调试取样器,运行脚本来看下响应结果
后面接口引用时,可以引用type_id或者type_id_g1
如果ioType和type中的值不固定,每次请求后都显示随机的的值,那么只能按照列表中每组值的顺序来提取
通过观察,发现 {\"ioType\":2,\"type\":6,\"id\":1838} 出现在列表中的第5个位置
所以可以按照如下方式来写正则表达式
这次结果如下:
相关文章
- 批判思考小记1:正则表达式
- 常用正则表达式列表
- [转载]js正则表达式/replace替换变量方法
- 实用正则表达式扫描android SDcard的文件
- js手机号码正则表达式
- 【TD函数】Teradata正则表达式函数
- 正则表达式 Regex 语法 总结 [MD]
- 正则表达式在线生成网站推荐
- 正则表达式Regex类常用方法
- 正则表达式生成—VerbalExpressions
- Android 验证姓名、身份证、银行卡、手机号(正则表达式校验)
- 每天一点正则表达式积累(三)
- DQL正则表达式
- python里使用正则表达式的非捕获模式实例二
- Java 正则表达式
- python基础===正则表达式
- shell脚本应用——正则表达式
- Java正则表达式,判断字符串是否为正整数、非负整数、非空且为非负整数