【问题标题】:How to extract value from JSON Path extractor based on condition如何根据条件从 JSON 路径提取器中提取值
【发布时间】:2021-12-03 00:56:16
【问题描述】:

我想根据条件 "status":"Ready for Review" 从 HTTP 采样器的以下 JSON 响应正文中获取 "currentApproversStr:" 的值,并将其传递给以下 HTTP 采样器。

我尝试了以下方法,但它不起作用

  1. 已创建变量的名称:currentApproversStr
  2. JSON 路径表达式:$.[?((@.currentApproversStr == "Validation, Civa" || @.currentApproversStr == "Validation, Darla" || @.currentApproversStr == "Validation, Bittl" || @ .currentApproversStr == "Validation, Cha" || @.currentApproversStr == "Validation, Barnett" ) && @.status== "Ready for Review")]
  3. 匹配编号:-1 OR 1

但 Dummy Sampler 会返回结果

我们无法保证具有“状态”的“timecardId”块的顺序:“Ready for Review”,即有时排在第二位,有时排在最后。这是第二个街区。所以不确定匹配号:我应该给什么

[
  {
    "timecardId": 170803,
    "entryHeaderId": "db9341a9-32e8-4d45-a858-a88b75a42cef",
    "startsOn": "2021-10-24T00:00:00",
    "endsOn": "2021-10-30T00:00:00",
    "worksightStatus": "SignedOff",
    "projectId": 1977,
    "userId": 60874,
    "status": "Submitted for Approval",
    "batchId": 39814,
    "emergencyType": "",
    "htgDealMemoId": "0d0ff42b-5c4b-4695-b527-34dfc64585e5",
    "unionId": "1c77c660-28fc-4e40-b557-132f3da39597",
    "currentApproversStr": "Perf, PA",
    "commentStr": "",
    "commentUserName": "",
    "commentCreatedAt": "1900-01-01T00:00:00",
    "occupationCode": "TECHNICIAN",
    "activeApprovalFlowId": 166669,
    "isAllowanceOnly": false,
    "departmentId": null,
    "datePosted": null
  },
  {
    "timecardId": 170807,
    "entryHeaderId": "c9809446-b01f-4f42-add6-9b441c3d0114",
    "startsOn": "2021-10-17T00:00:00",
    "endsOn": "2021-10-23T00:00:00",
    "worksightStatus": "Outstanding",
    "projectId": 1977,
    "userId": 60874,
    "status": "Ready for Review",
    "batchId": 39815,
    "emergencyType": "",
    "htgDealMemoId": "0d0ff42b-5c4b-4695-b527-34dfc64585e5",
    "unionId": "1c77c660-28fc-4e40-b557-132f3da39597",
    "currentApproversStr": "Validation, Civa",
    "commentStr": "",
    "commentUserName": "",
    "commentCreatedAt": "1900-01-01T00:00:00",
    "occupationCode": "TECHNICIAN",
    "activeApprovalFlowId": 166674,
    "isAllowanceOnly": false,
    "departmentId": null,
    "datePosted": null
  },
  {
    "timecardId": 170802,
    "entryHeaderId": "db9341a9-32e8-4d45-a858-a88b75a42cef",
    "startsOn": "2021-10-24T00:00:00",
    "endsOn": "2021-10-30T00:00:00",
    "worksightStatus": "SignedOff",
    "projectId": 1977,
    "userId": 60874,
    "status": "Submitted for Approval",
    "batchId": 39814,
    "emergencyType": "",
    "htgDealMemoId": "0d0ff42b-5c4b-4695-b527-34dfc64585e5",
    "unionId": "1c77c660-28fc-4e40-b557-132f3da39597",
    "currentApproversStr": "Perf, PA",
    "commentStr": "",
    "commentUserName": "",
    "commentCreatedAt": "1900-01-01T00:00:00",
    "occupationCode": "TECHNICIAN",
    "activeApprovalFlowId": 166669,
    "isAllowanceOnly": false,
    "departmentId": null,
    "datePosted": null
  }
]

【问题讨论】:

    标签: json jmeter json-path-expression


    【解决方案1】:

    问题: 原因是您误解了 JSON 提取器的工作方式。此功能允许您在一个设置中提取多个变量,但 Names of created variables 的数量 = JSON Path expressions 的数量 = Default Values 的数量。

    例如,您要提取 2 个变量:

    • 创建变量的名称:var_name_1var_name_2

    • JSON 路径表达式:json_expression_1json_expression_2

    • 默认值:default_1default_2

    (注意:记住使用分号(;)分隔值)

    但是你设置了 1 变量,1 json 表达式与 MANY 默认值 --> 不匹配。

    解决方案: 你可以这样设置:

    Names of created variables: currentApproversStr
    JSON Path expressions: $.[?(@.status== "Ready for Review")].currentApproversStr
    Match No: -1
    Default Values: NOT_FOUND
    

    结果:

    currentApproversStr_1=Validation, Civa
    currentApproversStr_matchNr=1
    

    【讨论】:

    • @lucsnaguyen。非常感谢!成功了!
    • 它返回结果,但不替换以下请求中的值。无法弄清楚出了什么问题。请参阅随附的屏幕截图
    • @rpagadala 如果Match No: -1 并且只有一个匹配项--> var_name 将是currentApproversStr_1。你可以改Match No: -1 --> Match No: 1,然后得到var_name就是currentApproversStr
    • @lucsnaguyen 成功了!非常感谢!
    【解决方案2】:

    “匹配号”的作用如下:如果您的查询返回超过 1 个结果:

    1. 0 - 返回随机结果

    2. -1 - 以以下形式返回所有结果:

      • currentApproversStr_1 - 第一场比赛
      • currentApproversStr_2 - 第二场比赛
      • currentApproversStr_matchNr - 匹配总数
    3. any positive integer - 返回给定的匹配项

    它不仅适用于JSON Extractor,还适用于从响应中提取值的所有其他JMeter PostProcessors

    你可以看到使用Debug Sampler and View Results Tree listener combination生成的JMeter Variables

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      相关资源
      最近更新 更多