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

Karate For loop to get ids based on pattern and then use a delete feature

我收到了一个 API 电话的回复,它给了我一个设备列表,每个设备都有一个 ID。其中一些设备是 ID 以前缀 'Test' Example 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