如何在空手道框架的帮助下将响应导出到文件或验证标签值
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>
"""
我正在使用以下功能文件并生成响应。我们如何将响应存储到 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>
"""