有没有办法根据空手道中的关键字选择某些数据?

Is there a way to pick certain data based on a keyword in Karate?

我正在处理空手道的电子邮件注册用例,用户会收到一封带有 URL

的注册电子邮件

我有这个 JSON 回复:

{
    "links": [
        "https://www.link1.com",
        "https://www.link2.com",
        "https://www.link3.com",
        "https://www.link4.com",
        "https://www.link5/go/there.com"
    ]
}

我想获取其中包含“/go/”的 link 并将其用于我即将到来的请求,如 Given URL

 * def goLink = someLogic??

如果有人问到这个问题或者有可用的例子,我们深表歉意。如果有人可以将我重定向到资源,我将不胜感激。我可以使用什么逻辑来获取仅包含“/go/”的 URL?然后将其用作我的 Given URL?

注意:我尝试编写一个简单的 Java Helper class,但是这也没有帮助

//Java Helper
public static String fetchRegistrationURL(List<Object> myList) {
    for (Object el : myList) {
        if (el.toString().contains("go")) {
            myList.add(el);
        } else {

        }

    }
    return myList.get(0).toString();

}

试图将此传递给功能:

* def utility = Java.type('Com.helpers.Utilities')   
* def urlList = response.links
Then print '--urlList ==> ', urlList
* def acceptURL = utility.fetchRegistrationURL(urlList)
Then print '--register ==> ', acceptURL
Then status 200

这也失败了。希望看看@karate 是否有更简单的解决方案

Failure

版本:

     <java.version>1.8</java.version>
    <maven.compiler.version>3.8.1</maven.compiler.version>
    <maven.surefire.version>2.22.2</maven.surefire.version>
     <artifactId>karate-junit5</artifactId>
    <karate.version>1.1.0</karate.version>

使用“过滤”或“查找”操作。请阅读文档:https://github.com/karatelabs/karate#json-transforms

这是一个有效的简单示例。您可以尝试将其粘贴到空手道测试中并进行研究。

* def response =
"""
{
    "links": [
        "https://www.link1.com",
        "https://www.link2.com",
        "https://www.link3.com",
        "https://www.link4.com",
        "https://www.link5/go/there.com"
    ]
}
"""
* def filtered = response.links.filter(x => x.includes('/go/'))
* match filtered == [ 'https://www.link5/go/there.com' ]

上面我用的是JSArray.filter()的方法,但是karate.filter()也可以。 Array.find() 根据您的要求可能会更好。