如何在空手道框架的帮助下将响应导出到文件或验证标签值

How to export response into a file or validate the tag value with the help of Karate Framework

我正在使用以下功能文件并生成响应。我们如何将响应存储到 XML 文件而不是显示控制台?

特征文件:

Feature: Test soap end point

    Background:
    * url 'sample url'

    Scenario: SmokeTest
       Given request read('getMbrWksMembershipDetails.xml')
       When soap action 'test url' 
       Then status 200
       And print response 

已编辑:我得到的回复是这样的。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns1:getMbrWksMembershipDetailsResponse xmlns:ns1="xxxxxxxxxx">
         <ns4:WksMembershipSummaryResponse xmlns:ns2="xxxxxxxx" xmlns:ns3="xxxxxxxxxx" xmlns:ns4="xxxxxxxxxx">
            <ns2:customerSummary>
               <ns2:address>
                  <ns2:city>SOUTH CHESTERFIELD</ns2:city>
                  <ns2:country>USA</ns2:country>
                  <ns2:isoCountryCode>US</ns2:isoCountryCode>
                  <ns2:line1>9998, N. MICHIGAN ROAD.</ns2:line1>
                  <ns2:postalCode>23834</ns2:postalCode>
                  <ns2:state>VA</ns2:state>
               </ns2:address>
               <ns2:allowPasswordChange>true</ns2:allowPasswordChange>
               <ns2:arpMember>false</ns2:arpMember>
               <ns2:brandCode>ABC</ns2:brandCode>
               <ns2:brandId>1</ns2:brandId>
               <ns2:companyCode>ABC</ns2:companyCode>
               <ns2:eliteMemberRewardStatus>false</ns2:eliteMemberRewardStatus>.....

问题: 我如何验证此响应中的标签值?

谢谢,

首先问一个问题 - 你为什么要这样做? Karate 是一个测试框架,除了能够 运行 响应断言外,您还可以在下一个请求中轻松地重复使用响应(或响应中的一些数据)。无需将任何内容保存到文件中。

如果您按照 logging 上的空手道文档中的说明进行操作,您还将看到记录到文件 target/karate.log 的响应。

当您使用 JUnit 运行ner 时,您将在 HTML report.

中看到所有响应

parallel runner 相同的情况。

无论如何,即便如此,如果您真的想将回复保存到文件中,请使用 Java interop 并编写您自己的实用程序来保存到文件中,只需几行代码.由于上述原因,它没有内置到空手道中。

编辑:好吧,在上面输入所有内容之后,结果您只是想知道如何验证(断言/匹配)响应?太好了,这就是空手道的全部卖点。

我假设您已经阅读了 Karate documentation. Also refer this example: soap.xml and this one for more ideas: xml.feature

无论如何,这里有一些基于您的 XML 样本的提示可以帮助您入门。您可以将下面的内容粘贴到 Scenario: 和 运行 中,而无需发出 HTTP 请求,这样可以测试并适应 match:

* def response = 
"""
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns1:getMbrWksMembershipDetailsResponse xmlns:ns1="xxxxxxxxxx">
         <ns4:WksMembershipSummaryResponse xmlns:ns2="xxxxxxxx" xmlns:ns3="xxxxxxxxxx" xmlns:ns4="xxxxxxxxxx">
            <ns2:customerSummary>
               <ns2:address>
                  <ns2:city>SOUTH CHESTERFIELD</ns2:city>
                  <ns2:country>USA</ns2:country>
                  <ns2:isoCountryCode>US</ns2:isoCountryCode>
                  <ns2:line1>9998, N. MICHIGAN ROAD.</ns2:line1>
                  <ns2:postalCode>23834</ns2:postalCode>
                  <ns2:state>VA</ns2:state>
               </ns2:address>
            </ns2:customerSummary>
        </ns4:WksMembershipSummaryResponse>
    </ns1:getMbrWksMembershipDetailsResponse>
  </soap:Body>
</soap:Envelope>
"""
* match //address/city == 'SOUTH CHESTERFIELD'

* match //customerSummary/address == 
    """
    <ns2:address>
       <ns2:city>SOUTH CHESTERFIELD</ns2:city>
       <ns2:country>USA</ns2:country>
       <ns2:isoCountryCode>US</ns2:isoCountryCode>
       <ns2:line1>9998, N. MICHIGAN ROAD.</ns2:line1>
       <ns2:postalCode>23834</ns2:postalCode>
       <ns2:state>VA</ns2:state>
    </ns2:address>
    """