如何使用空手道验证给定 XML 的 SOAP 服务 XML 文件
How to validate SOAP service XML file with given XML using Karate
我正在学习 空手道 API 以执行我们基于 SOAP 的 Web 服务。为此,我创建了两个 XML 文件,其中一个是请求信息,另一个是响应数据。
然后我又创建了一个名为 webservice.feature 的文件。
当我执行此功能文件时,我在控制台中收到以下信息,但我不明白,也不知道如何验证这些信息。请提出您的建议。
webservice.feature 文件:
Feature: Get Membership Details
Background:
* url 'http://111.111.221.145:2201/Customer/ProxyServices/CustomerSummary_PS?wsdl'
Scenario: FunctionalTest
Given request read('getMbrWksMembershipSummaryRequest.xml')
And header Content-Type = 'application/soap+xml; charset=utf-8'
When method post
Then status 200
And match response customerSummary/address/city == read('getMbrWksMembershipSummaryResponse.xml')
And print 'response: ', response
请求文件。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://www.abcdedf.com/services/customersummary" xmlns:con="http://www.abcdedf.com/services/customersummary/contract">
<soapenv:Header/>
<soapenv:Body>
<cus:getMbrWksMembershipDetails>
<!--Optional:-->
<cus:WksMembershipSummaryRequest>
<!--Optional:-->
<channel>CC</channel>
<!--Optional:-->
<consumerName>GUIDE_PORTAL</consumerName>
<level>0</level>
<!--Optional:-->
<locale>en_US</locale>
<!--Optional:-->
<productType>ExtraVacation</productType>
<!--Optional:-->
<requestId/>
<!--Optional:-->
<sessionId/>
<!--Optional:-->
<con:memberID>C05506493</con:memberID>
</cus:WksMembershipSummaryRequest>
</cus:getMbrWksMembershipDetails>
</soapenv:Body>
</soapenv:Envelope>
响应文件:
<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>
控制台输出:
You can implement missing steps with the snippets below:
@Given("^url 'http://(\d+)\.(\d+)\.(\d+)\.(\d+):(\d+)/Customer/ProxyServices/CustomerSummary_PS\?wsdl'$")
public void url_http_Customer_ProxyServices_CustomerSummary_PS_wsdl(int arg1, int arg2, int arg3, int arg4, int arg5) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@Given("^request read\('getMbrWksMembershipSummaryRequest\.xml'\)$")...
谢谢
错误消息似乎是标准的 Cucumber 错误,而不是 Karate。看起来你的项目结构本身是错误的。我建议您按照文档中的说明进行操作:Quickstart。 运行 以下命令:
mvn archetype:generate \
-DarchetypeGroupId=com.intuit.karate \
-DarchetypeArtifactId=karate-archetype \
-DarchetypeVersion=0.6.2 \
-DgroupId=com.mycompany \
-DartifactId=myproject
然后在 users.feature
旁边创建此功能文件:soap.feature
。如前所述,您可以将 url
更改为 'http://www.dneonline.com/calculator.asmx'
。现在,如果您右键单击 运行 UsersRunner.java
作为 JUnit 测试,您应该会看到一切正常。
我正在学习 空手道 API 以执行我们基于 SOAP 的 Web 服务。为此,我创建了两个 XML 文件,其中一个是请求信息,另一个是响应数据。
然后我又创建了一个名为 webservice.feature 的文件。
当我执行此功能文件时,我在控制台中收到以下信息,但我不明白,也不知道如何验证这些信息。请提出您的建议。
webservice.feature 文件:
Feature: Get Membership Details
Background:
* url 'http://111.111.221.145:2201/Customer/ProxyServices/CustomerSummary_PS?wsdl'
Scenario: FunctionalTest
Given request read('getMbrWksMembershipSummaryRequest.xml')
And header Content-Type = 'application/soap+xml; charset=utf-8'
When method post
Then status 200
And match response customerSummary/address/city == read('getMbrWksMembershipSummaryResponse.xml')
And print 'response: ', response
请求文件。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://www.abcdedf.com/services/customersummary" xmlns:con="http://www.abcdedf.com/services/customersummary/contract">
<soapenv:Header/>
<soapenv:Body>
<cus:getMbrWksMembershipDetails>
<!--Optional:-->
<cus:WksMembershipSummaryRequest>
<!--Optional:-->
<channel>CC</channel>
<!--Optional:-->
<consumerName>GUIDE_PORTAL</consumerName>
<level>0</level>
<!--Optional:-->
<locale>en_US</locale>
<!--Optional:-->
<productType>ExtraVacation</productType>
<!--Optional:-->
<requestId/>
<!--Optional:-->
<sessionId/>
<!--Optional:-->
<con:memberID>C05506493</con:memberID>
</cus:WksMembershipSummaryRequest>
</cus:getMbrWksMembershipDetails>
</soapenv:Body>
</soapenv:Envelope>
响应文件:
<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>
控制台输出:
You can implement missing steps with the snippets below:
@Given("^url 'http://(\d+)\.(\d+)\.(\d+)\.(\d+):(\d+)/Customer/ProxyServices/CustomerSummary_PS\?wsdl'$")
public void url_http_Customer_ProxyServices_CustomerSummary_PS_wsdl(int arg1, int arg2, int arg3, int arg4, int arg5) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@Given("^request read\('getMbrWksMembershipSummaryRequest\.xml'\)$")...
谢谢
错误消息似乎是标准的 Cucumber 错误,而不是 Karate。看起来你的项目结构本身是错误的。我建议您按照文档中的说明进行操作:Quickstart。 运行 以下命令:
mvn archetype:generate \
-DarchetypeGroupId=com.intuit.karate \
-DarchetypeArtifactId=karate-archetype \
-DarchetypeVersion=0.6.2 \
-DgroupId=com.mycompany \
-DartifactId=myproject
然后在 users.feature
旁边创建此功能文件:soap.feature
。如前所述,您可以将 url
更改为 'http://www.dneonline.com/calculator.asmx'
。现在,如果您右键单击 运行 UsersRunner.java
作为 JUnit 测试,您应该会看到一切正常。