【问题标题】:How to pass response values to Java API from Karate如何将响应值从空手道传递给 Java API
【发布时间】:2018-01-02 09:47:31
【问题描述】:

如何将 Karate API 中的值传递给 Java 类?

如文档中所述,我使用以下代码 sn-p 从 Java API 获取响应。但它返回带有未格式化 JSON 内容的响应。

Map<String, Object> result = CucumberRunner.runClasspathFeature("demo/java/from-java.feature", args, true);

然后,我使用以下脚本打印响应。

for(Map.Entry<String , Object> entry: getMbrWksMembershipDetailsResponse.entrySet())
{
    if (entry.getKey().equalsIgnoreCase("response"))
    {
        System.out.println(entry.getValue());
    }
}

它显示像,

{soap:Envelope={_={soap:Body={ns1:getMbrWksMembershipDetailsResponse={_={ns4:WksMembershipSummaryResponse={_={ns2:customerSummary={ns2:address={ns2:city=SOUTH CHESTERFIELD, ns2:country=USA, ns2:isoCountryCode=US, ns2:line1=9998, N. MICHIGAN ROAD., ns2:postalCode=23834, ns2:state=VA}, ns2:allowPasswordChange=true, ns2:arpMember=false, ns2:brandCode=RCI, ns2:brandId=1, ns2:companyCode=RCI, ns2:eliteMemberRewardStatus=false, ns2:eliteRewardStatus=true, ns2:europePointsClubMember=false, ns2:firstName=FRANK, ns2:homePhone=804/733-3004, ns2:isoCurrencyCode=USD, ns2:isoLanguageCode=EN, ns2:language=EN, ns2:lastName=BROWNING B, ns2:locale=en_US, ns2:memberDeveloperRenewed=false, ns2:memberEnrolledDate=2009-10-26T00:00:00-04:00, ns2:memberEnrolledForDirectDebit=false, ns2:memberEnrolledForPltDirectDebit=false, ns2:memberStatus=A, ns2:middleName=B, ns2:msgTranslationLanguageCode=EN, ns2:officePhone=0/-0, ns2:pointsCurrencyCode=0......

因此,根据地图中的字段/标签拆分数据并不困难。

请建议从 Java API 获取值字段 wize / tag wise 的最佳选择。

谢谢。

【问题讨论】:

    标签: web-services testing automation karate


    【解决方案1】:

    是的,XML 在内部是一个奇怪的Map 结构,请参阅type-conversion 部分了解更多信息。

    你有一个简单的方法来做到这一点。只需定义一个新变量,将response 转换为字符串即可。

    * xmlstring responseXml = response
    

    在此之后,您只需从 Java API 返回的 Map 中取出 responseXml,这将是一个字符串。

    注意:除非您真的想将空手道与其他东西混合使用,否则不要使用 Java API。空手道的重点是避免使用 Java 来测试 JSON 和 XML Web 服务。

    【讨论】:

    • 嗨,我是这样使用的 * def xmlVar = response * def APIHelperClass = Java.type('com.org.utilities.APIHelperClass') * def result = APIHelperClass.getResponse(xmlVar) * print '结果 :', 结果 ---------- 但结果与上述格式相同.... :(
    • 当然可以。仔细阅读我的回答。你在任何地方看到“def”吗?
    猜你喜欢
    • 2019-01-24
    • 2019-04-16
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多