Java 使用fitnesse通过http测试基于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服务,这不会是一个问题,但

我正在努力找到一种好方法,使用Fitnesse为基于xml over http的服务编写自动验收测试。这些服务具有复杂的请求和响应,其中包含来自服务之间不共享的模式的xml元素。我不想创建大量的Fixture代码来构建请求、封送/解封送以及对每个服务进行http调用

我已经调查过了(https://github.com/smartrics/RestFixture)这似乎是一个很好的方法来限制测试这类服务的管道工作。唯一的问题是以良好的方式生成请求。对于“真正的”rest服务,这不会是一个问题,但是我的服务在请求体中需要大量xml

我希望以某种方式允许测试人员使用场景表建立他们的请求,但是,由于所有服务都使用不同的模式,因此,如果不创建一个真正复杂的支持装置(负责创建所有不同的请求)或几个装置(每个装置负责生成一个服务的请求),我就无法看到如何做到这一点。不管是哪种情况,我都会重新开始写昂贵的管道。
这里有人对此有什么想法吗

我创建了一个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|