有没有一种方法可以根据空手道中的关键词来挑选某些数据



我正在处理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/";并将其作为Given URL 用于我即将提出的请求

* def goLink = someLogic??

如果有人问我这个问题或有例子,我深表歉意。如果有人能将我重定向到资源,我将不胜感激。我可以使用什么逻辑来获得包含"/go/";只有然后用它作为我的Given URL?

注意:我试图编写一个简单的Java Helper类,但这对都没有帮助

//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是否有一个更简单的解决方案

故障

版本:

<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-转换

下面是一个有效的简单示例。你可以试着把它粘贴到空手道测试中并研究它

* 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()可能会根据您的要求更好地工作。