【问题标题】:regex from json array in JMeterJMeter中json数组的正则表达式
【发布时间】:2018-03-01 07:29:04
【问题描述】:

我需要从一个类似这样的长 json 数组中提取开始和结束日期:

:   {
:   :   "id":10069,
:   :   "type":"Programming",
:   :   "preprID":25053483,
:   :   "contentfulId":"5StbNjpoGsyMqw2a6M4iwI",
:   :   "title":"Bas",
:   :   "start":"2017-09-14T03:00:00+02:00",
:   :   "end":"2017-09-14T06:00:00+02:00",
:   :   "description":"Blabla",
:   :   "showOnlineAvailable":true,
:   :   "allowMetadata":true,

:   },
:   {
:   :   "id":10070,
:   :   "type":"Programming",
:   :   "preprID":9249755,
:   :   "contentfulId":"4VoOfJbuIoA6qq6eyQukcM",
:   :   "title":"Someone",
:   :   "start":"2017-09-14T06:00:00+02:00",
:   :   "end":"2017-09-14T10:00:00+02:00",
:   :   "description":"Blabla.",
:   :   "showOnlineAvailable":true,
:   :   "allowMetadata":true,

如何同时提取开始日期和相关的结束日期? 将为所有并发用户随机调用开始/结束日期,因此我需要确保日期都相应匹配。

简而言之,我的 jmeter 测试中的每个并发用户都会提取一个随机的开始/结束日期,这些将用于进一步的请求。

我尝试使用"start":"([^"]+)"|"end":"([^"]+)",但 JMeter 似乎没有获得第二组。

【问题讨论】:

  • 你只是想从这个数组中获取开始和结束日期?
  • 是的,数组更长。但每次我想随机提取一个 START + END 日期。
  • 到目前为止你尝试了什么?
  • "start":"([^"]+)"|"end":"([^"]+)" 尽管第二组 (end) 似乎不起作用..

标签: json regex jmeter


【解决方案1】:

您可以使用模板获取这两个正则表达式:$1$$2$。请参阅regex jmeter manual,但我认为您需要 2 个单独的变量,所以我建议:

使用 2 个后置正则表达式,一个带有 "start":"([^"]+),第二个带有:end":"([^"]+)" ,每个带有不同的引用名称

对于随机值,在匹配号中输入 0(0 表示随机)

【讨论】:

    【解决方案2】:

    这必须是正则表达式吗? - 我没用过,但你可能想看看JSON Extractor Post Processor,因为它是 JSON 数据。

    我认为(但尚未测试)您可以使用类似

    的东西
    $.[${randomNum}].start
    

    直接引用数组项。

    根据其他答案,您可能需要两个后处理器(每个数据字段一个)来提取两个值。

    【讨论】:

      【解决方案3】:
      (?s)"start":"(.*?)",*"end":"(.*?)",
      

      成功了。现在使用 $1$$2$ 捕获两个组

      【讨论】:

        【解决方案4】:
        1. JSON Extractor添加为返回上述JSON的请求的子节点并配置如下:

          • 变量名:任意2个以分号分隔的变量名,即start; end
          • JSON 路径表达式:$..start; $..end
          • 匹配号:-1
          • 默认值:NOT FOUND; NOT FOUND

            执行请求后,它将生成以下 JMeter 变量:

                    end_1=2017-09-14T06:00:00+02:00
                    end_2=2017-09-14T10:00:00+02:00
                    end_matchNr=2
                    start_1=2017-09-14T03:00:00+02:00
                    start_2=2017-09-14T06:00:00+02:00
                    start_matchNr=2
            
        2. 如果您稍后需要使用随机变量,您可以使用假设 __V()__Random 函数组合的表达式,例如:

        【讨论】:

          猜你喜欢
          • 2021-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多