Karate 空手道For循环根据模式获取ID,然后使用删除功能

Karate 空手道For循环根据模式获取ID,然后使用删除功能,karate,Karate,我收到一个API调用的响应,该调用为我提供了一个设备列表,每个设备都有一个id。其中一些设备是id以前缀“test”开头的测试设备,例如Test319244 我只希望检索那些前缀为“Test”的ID,它们可能位于数组中,并且能够将它们传递给另一个功能文件,该文件将设备ID作为参数来删除它。基本上我想删除所有的测试设备 下面是包含所有设备ID的示例响应 { "items": [ { "deviceId": &q

我收到一个API调用的响应,该调用为我提供了一个设备列表,每个设备都有一个id。其中一些设备是id以前缀“test”开头的测试设备,例如Test319244

我只希望检索那些前缀为“Test”的ID,它们可能位于数组中,并且能够将它们传递给另一个功能文件,该文件将设备ID作为参数来删除它。基本上我想删除所有的测试设备

下面是包含所有设备ID的示例响应

{
    "items": [
        {
            "deviceId": "004401784033074000",
            "deviceType": "AVMAP_TMR",
            "disabled": false,
            "metadata": {
                "createdAt": "2020-07-20T00:00:00.000+00:00",
                "modifiedAt": "2020-07-20T00:00:00.000+00:00"
            }
        },
        {
            "deviceId": "Test319246",
            "deviceType": "AVMAP_TMR",
            "disabled": false,
            "metadata": {
                "createdAt": "2020-07-21T00:00:00.000+00:00",
                "modifiedAt": "2020-07-21T00:00:00.000+00:00"
            }
        },
        {
            "deviceId": "Test319245",
            "deviceType": "AVMAP_TMR",
            "disabled": false,
            "metadata": {
                "createdAt": "2020-07-21T00:00:00.000+00:00",
                "modifiedAt": "2020-07-21T00:00:00.000+00:00"
            }
        },
        {
            "deviceId": "Test319244",
            "deviceType": "AVMAP_TMR",
            "disabled": false,
            "metadata": {
                "createdAt": "2020-07-21T00:00:00.000+00:00",
                "modifiedAt": "2020-07-21T00:00:00.000+00:00"
            }
        },
        {
            "deviceId": "command-service",
            "deviceType": "service",
            "disabled": false,
            "metadata": {
                "createdAt": "2020-07-20T00:00:00.000+00:00",
                "modifiedAt": "2020-07-20T00:00:00.000+00:00"
            }
        },
        {
            "deviceId": "kafka-connect-all",
            "deviceType": "kafka-connect",
            "disabled": false,
            "metadata": {
                "createdAt": "2020-07-20T00:00:00.000+00:00",
                "modifiedAt": "2020-07-20T00:00:00.000+00:00"
            }
        }
    ],
    "metadata": {
        "pagination": {
            "limit": 50,
            "offset": 0,
            "previousOffset": 0,
            "nextOffset": 0,
            "totalCount": 15
        },
        "sortedBy": [
            {
                "field": "deviceId",
                "order": "ASC"
            }
        ]
    }
}
在上面的示例中,我只想删除ID为Test319244、Test319245和Test319246的设备

如何根据模式(Testxxxxxx)获取ID数组并将其传递给另一个功能文件

我需要帮助来定义ID数组,如:

* def ids = extract the ids based on the pattern
# pass the ids to the delete feature which would send the id one at a time and delete the device.
* def delete = call(delete.feature) ids
以下是“删除方案”功能文件的外观:

  Scenario: Delete Device
    # device_registry_url defined in karate-config.js
    Given url device_registry_url
    And path '/device/'+DeviceID
    And header Authorization = authheader
    And request ''
    When method delete
    Then status 200

这是正确的方法还是我们可以用更好的方法?如果是这样的话,有人能帮忙吗?

只要使用
karate.filter()
,你就知道该怎么做了:

* def fun = function(x){ return x.deviceId.startsWith('Test') }
* def filtered = karate.filter(response.items, fun)
* call read('delete.feature') filtered

谢谢你,彼得。这是非常有用的。我试着用同样的方法获取索引,但之后就被卡住了。这是一种简单易行的方法。再次感谢你。