有没有办法根据空手道中的关键字选择某些数据?
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()
根据您的要求可能会更好。
我正在处理空手道的电子邮件注册用例,用户会收到一封带有 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()
根据您的要求可能会更好。