2011-01-05 70 views
1

我正在考虑使用FitNesse为RESTful API的某些扩展编写一些验收测试。 GET响应在匿名名称空间中包括XML,例如使用FitNesse使用RestFixture和匿名命名空间测试RESTful API

<?xml version="1.0" encoding="utf-8"?> 
<things xmlns="http://example.com/ns/"> 
<thing id="1"/> 
<thing id="2"/> 
</things> 

FitNesse夹具RestFixture似乎是一个很好的选择。它应该允许我运行XPath来验证响应,但是这似乎不能很好地与匿名命名空间配合使用。下面的测试将失败,因为需要的命名空间指定:

|!-smartrics.rest.fitnesse.fixture.RestFixture-!|http://example.com/v1.0/inbox | 
|GET | /things | 200 | | //thing | 

我找不到表达的XPath这样RestFixture将成功地解析它的方式。

有两点要注意:

(一),因为它们在命名空间不是您可以查询的属性。以下通过:

|GET | /things | 200 | | //@id | 

(b)其他地方使用字符串匹配的示例。这是错误的 - 下面的传球也是!

|GET | /things | 200 | | 'complete and utter nonsense' | 
+0

我发现使用XPath局地一个丑陋的解决方法例如,//* [local-name(.)='thing'][@id="2“]应该工作 – MrBlueSky 2011-01-06 16:01:21

+0

作为参考,我也在原始RestFixture作者的博客上提出了这个问题: http://smartrics.blogspot.com/2008/08/get-fitnesse-with-some-rest.html – MrBlueSky 2011-01-07 09:14:58

回答

4

RestFixture现在支持命名空间。 您需要使用RestFixtureConfig(它也必须包含默认名称空间的别名)将名称空间上下文定义为别名/名称空间URI的键值映射。

然后,您可以使用xpath中定义的与请求响应正文或let()命令匹配的别名从响应中提取数据。

包括一个示例,其余夹具的活文档中:

https://github.com/smartrics/RestFixture/downloads(查看下载HTML RestFixture- <版本>的.html