关于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个位置

所以可以按照如下方式来写正则表达式

 这次结果如下:

 

posted @ 2021-08-02 13:40  我是冰霜  阅读(168)  评论(0编辑  收藏  举报