JMeter:如何使用正则表达式提取重复字段的值?

时间:2013-08-28 23:05:45

标签: regex json jmeter

我有以下Response Body JSON:

{
    "address": [
    {
        "id": "1234"
    }
    ],
    "id": "d1a4f010-48d9-434b-9b3a-2d2b12f5e38c"
}

我正在尝试提取第二个“id”字段的值,即

"id": "d1a4f010-48d9-434b-9b3a-2d2b12f5e38c"

我在JMeter中使用此正则表达式: 正则表达式:“id”:“(。+?)”

当我运行我的测试时,它返回“1234”而不是guid。如何更改我的正则表达式以使其返回guid?

7 个答案:

答案 0 :(得分:10)

使用 JMeter ,您可以使用Regular Expression Extractor ...

Reference Name: myid
Regular Expression: "id": "(.+?)"
Template: $1$
Match No.: 2

如果您使用Match No: ...

指定
0 = Random Match
1 = First Match 
2 = Second Match
etc....

或使用相应的变量来访问匹配项。 ${myid_2}

变量设置如下:

myid_matchNr - Number of matches found, possibly 0
myid_n       - (n = 1, 2, etc..) Generated by the template
myid_n_gm    - (m = 0, 1, 2) Groups for the match (n) 
myid         - By itself it is always set to the default value
myid_gn      - Not set at all

或者根据这种情况来判断,如果你更喜欢正则表达式而且你的字符串完全符合规定。你可以做..

],\s+"id": "(.+?)"

答案 1 :(得分:1)

你可以使用懒惰的正则表达式直接找到guid,而不是找到“id”

这样的事情:([0-9a-z-]{36}).*?

如果您不确定如何创建正则表达式,只需使用在线正则表达式制作工具。

答案 2 :(得分:0)

我不知道jmeter但要获得第二个id这个表达式的值

 "id"\s*:.+?"id"\s*:\s*"([^"]*)" 

它将以某些语言返回您想要的$ 1变量。我想在jmeter中你可以得到类似的东西来获得第一组。

根据this page可能是$ {MYREF_g1}?

答案 3 :(得分:0)

给定的响应值

{
    "address": [
    {
        "id": "1234"
    }
    ],
    "id": "d1a4f010-48d9-434b-9b3a-2d2b12f5e38c"
}

正则表达式以提取第二个id值

正则表达式格式

],\s\s\s\s\s"id": "(.+)"

请注意

The above regex extract the following id values
d1a4f010-48d9-434b-9b3a-2d2b12f5e38c

答案 4 :(得分:0)

我试过这个:

"id":\s*"([0-9a-f\-]*)"

答案 5 :(得分:0)

尝试使用以下表达式

"id": "([0-9a-z-])*+"

答案 6 :(得分:-1)

第1步:

ID:" 1234&#34 ;;

ID:(?+)

" 1234"

但我们只需要价值。所以试试这个,

第2步:

ID:" 1234&#34 ;;

ID:(?'(+)&#39)

1234