我创建了一个夹具来解决这个问题,而无需任何额外的编码:XmlHttpTest。使用模仿 XML 结构的(自定义)Java 代码不处理创建请求。相反,它被处理为生成需要替换占位符的文本值。使用 XPath 表达式执行检查。
单个调用的示例用法(摘自项目的 GitHub wiki 页面之一):
!define POST_BODY { {{{
<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
<s11:Body>
<ns1:GetCityWeatherByZIP xmlns:ns1="http://ws.cdyne.com/WeatherWS/">
<ns1:ZIP>90210</ns1:ZIP>
</ns1:GetCityWeatherByZIP>
</s11:Body>
</s11:Envelope>
}}} }
|script |xml http test |
|post |${POST_BODY} |to |${URL} |
|check |response status|200 |
|show |response |
|register prefix|weather |for namespace |http://ws.cdyne.com/WeatherWS/|
|check |xPath |//weather:City/text()|Beverly Hills |
(结果)
或者(使用场景拨打多个电话)
!*> Scenario definition
!define POST_BODY_2 { {{{
<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
<s11:Body>
<ns1:GetCityWeatherByZIP xmlns:ns1="http://ws.cdyne.com/WeatherWS/">
<ns1:ZIP>@{zip}</ns1:ZIP>
</ns1:GetCityWeatherByZIP>
</s11:Body>
</s11:Envelope>
}}} }
|script|xml http test|
|table template |send request |
|post |${POST_BODY_2} |to |${URL} |
|check |response status|200 |
|show |response |
|register prefix|weather |for namespace |http://ws.cdyne.com/WeatherWS/|
|check |xPath |//weather:City/text()|@{City} |
*!
|send request |
|zip |City |
|10007|New York |
|94102|San Francisco|
(结果)
对于更复杂的请求,fixture 还允许使用 Freemarker 模板(用于可选元素和迭代等)。