【问题标题】:Regex JSON response Gatling stress tool正则表达式 JSON 响应 Gatling 压力工具
【发布时间】:2014-11-09 09:08:07
【问题描述】:

想要在 http 响应中捕获一个名为 scanNumber 的变量,如下所示:

{"resultCode":"SUCCESS","errorCode":null,"errorMessage":null,"profile":{"fullName":"TestFirstName TestMiddleName TestLastName","memberships":[{"name":"UA Gold Partner","number":"123-456-123-123","scanNumber":"123-456-123-123"}]}}

如何通过常规表达来做到这一点? 我使用的工具是 Gatling 压力工具(使用 Scala DSL)

我尝试过这样做:

.check(jsonPath("""${scanNumber}""").saveAs("scanNr")))

但我得到了错误:

---- Errors --------------------------------------------------------------------
> Check extractor resolution crashed: No attribute named 'scanNu      5 (100,0%)
mber' is defined

【问题讨论】:

    标签: regex json scala http gatling


    【解决方案1】:

    你第一次很接近。

    你真正想要的是:

    .check(jsonPath("""$..scanNumber""").saveAs("scanNr")))
    

    或者可能:

    .check(jsonPath("""$.profile.memberships[0].scanNumber""").saveAs("scanNr")))
    

    请注意,这里使用的是 jsonPath,而不是正则表达式。 JsonPath 应该比正则表达式更可靠。

    查看JsonPath spec 了解更多高级用法。

    【讨论】:

      【解决方案2】:

      使用这个正则表达式匹配 json 中的任何地方:

      /"scanNumber":"[^"]+"/
      

      如果你想匹配只是发生在你所说的结构中:

      /\{[^{[]+\{[^{[]+\[\{[^{[]*("scanNumber":"[^"]+")/
      

      【讨论】:

        【解决方案3】:

        由于 json 字段可能会更改其顺序,因此您应该让您的正则表达式更能容忍这些更改:

        val j = """{"resultCode":"SUCCESS","errorCode":null,"errorMessage":null,"profile":{"fullName":"TestFirstName TestMiddleName TestLastName","memberships":[{"name":"UA Gold Partner","number":"123-456-123-123","scanNumber":"123-456-123-123"}]}}"""
        val scanNumberRegx = """\{.*"memberships":\[\{.*"scanNumber":"([^"]*)".*""".r
        val scanNumberRegx(scanNumber) = j
        
        scanNumber //String = 123-456-123-123
        

        即使 json 字段的顺序不同,这也会起作用(但当然要保持结构)

        【讨论】:

          猜你喜欢
          • 2021-12-06
          • 2019-08-01
          • 2022-01-22
          • 2016-11-18
          • 2018-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多