Java 使用fitnesse通过http测试基于xml的服务
我正在努力找到一种好方法,使用Fitnesse为基于xml over http的服务编写自动验收测试。这些服务具有复杂的请求和响应,其中包含来自服务之间不共享的模式的xml元素。我不想创建大量的Fixture代码来构建请求、封送/解封送以及对每个服务进行http调用 我已经调查过了(https://github.com/smartrics/RestFixture)这似乎是一个很好的方法来限制测试这类服务的管道工作。唯一的问题是以良好的方式生成请求。对于“真正的”rest服务,这不会是一个问题,但是我的服务在请求体中需要大量xml 我希望以某种方式允许测试人员使用场景表建立他们的请求,但是,由于所有服务都使用不同的模式,因此,如果不创建一个真正复杂的支持装置(负责创建所有不同的请求)或几个装置(每个装置负责生成一个服务的请求),我就无法看到如何做到这一点。不管是哪种情况,我都会重新开始写昂贵的管道。Java 使用fitnesse通过http测试基于xml的服务,java,testing,automated-tests,fitnesse,fit-framework,Java,Testing,Automated Tests,Fitnesse,Fit Framework,我正在努力找到一种好方法,使用Fitnesse为基于xml over http的服务编写自动验收测试。这些服务具有复杂的请求和响应,其中包含来自服务之间不共享的模式的xml元素。我不想创建大量的Fixture代码来构建请求、封送/解封送以及对每个服务进行http调用 我已经调查过了(https://github.com/smartrics/RestFixture)这似乎是一个很好的方法来限制测试这类服务的管道工作。唯一的问题是以良好的方式生成请求。对于“真正的”rest服务,这不会是一个问题,但
这里有人对此有什么想法吗 我创建了一个fixture来解决这个问题,而不需要任何额外的编码:。创建请求不是使用模仿XML结构的(自定义)Java代码来处理的。相反,它被处理为生成需要替换占位符的文本值。使用XPath表达式执行检查 单个呼叫的示例用法(摘自):
!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 |
!定义POST_BODY{{{{
90210
}}} }
|脚本| xml http测试|
|post${post_BODY}}到|${URL}|
|检查|响应状态| 200|
|显示|响应|
|为命名空间注册前缀| weather ||http://ws.cdyne.com/WeatherWS/|
|选中| xPath |//天气:城市/text()|贝弗利山庄|
或者(使用场景进行多个调用)
!*>情景定义
!定义POST_BODY_2{{{{
@{zip}
}}} }
|脚本| xml http测试|
|表模板|发送请求|
|post${post|u BODY_2}}到|${URL}|
|检查|响应状态| 200|
|显示|响应|
|为命名空间注册前缀| weather ||http://ws.cdyne.com/WeatherWS/|
|选中| xPath |//天气:City/text()|@{City}|
*!
|发送请求|
|齐普市|
|10007 |纽约|
|94102 |旧金山|
()
对于更复杂的请求(如可选元素和迭代)。我问了一个类似的问题,答案似乎是没有任何通用夹具。您需要编写定制的fixture来处理XML解析到Fitnesse支持的用于验证的平面名称/值对中。决定如何公开解析的对象有点困难。好的,谢谢。我想我应该开始考虑一个好方法来公开解析的对象。
!*> 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|