使用Jmeter中的正则表达式提取器从JSON响应中提取值

时间:2019-02-13 10:26:06

标签: regex jmeter performance-testing

我有一个JSON响应,我想从中提取“交易ID”值,例如(3159184),并在下一个采样器中使用它。有人可以给我正则表达式以提取相同的值。我一直在寻找一些解决方案,但似乎没有用

{
    "lock_release_date": "2021-04-03T16:16:59.7800000+00:00",
    "party_id": "13623162",
    "reservation_id": "reserve-1-81b70981-f766-4ca7-a423-1f66ecaa7f2b",
    "reservation_line_items": [
        {
            "extended_properties": null,
            "inventory_pool": "available",
            "lead_type": "Flex",
            "line_item_id": "1",
            "market_id": 491759,
            "market_key": "143278|CA|COBROKE|CITY|FULL",
            "market_name": "143278",
            "market_state_id": "CA",
            "product_name": "Local Expert",
            "product_size": "SOV30",
            "product_type": "Postal Code",
            "reserved_quantity": 0,
            "transaction_id": 3159174
        }
    ],
    "reserved_by": "user1@abc.com"
}

这就是我在Jmeter中尝试的

setting

3 个答案:

答案 0 :(得分:1)

使用JSON提取器进行JSON响应,而不是使用正则表达式提取器。

将JSON路径表达式用作$..transaction_id

enter image description here

结果:

enter image description here

答案 1 :(得分:1)

如果您真的想要正则表达式,则类似于:

"transaction_id"\s?:\s?(\d+)

演示:

enter image description here

其中:

  • \s?代表一个可选的空格-这就是为什么您的表达式不起作用的原因
  • \d+代表一个数字

有关更多详细信息,请参见JMeter用户手册的Regular Expressions一章。


请注意,使用正则表达式解析JSON并不是最好的主意,请考虑使用JSON Extractor。它允许使用简单的JsonPath查询从JSON提取“有趣的”值,这些查询更易于创建/读取,并且更加健壮和可靠。相关的JSON路径查询为:

$.reservation_line_items[0].transaction_id

enter image description here

更多信息:API Testing With JMeter and the JSON Extractor

答案 2 :(得分:0)

上面提取的最简单的正则表达式为:

transaction_id”:(。+)

其中:

  • ()用于创建捕获组。
  • 。 (点)匹配除换行符以外的任何字符。
  • +(加号)与前面的令牌中的1个或多个匹配。

(。+?)可用于在找到第一个实例后停止查找。

使前面的量词变得懒惰,从而使其匹配的字符尽可能少。默认情况下,量词是贪婪的,并且将匹配尽可能多的字符。