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

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

 这次结果如下:

原文地址:https://www.cnblogs.com/hanmk/p/15088921.html