我有一些SOAP请求,我想要一个Fitnesse页面,它将执行请求并验证我得到了一个响应(要么只是检查它是200 OK还是检查返回的SOAP响应)。简而言之,我使用它来重放一系列SOAP请求并验证它们是否有效,就像部署后的冒烟测试一样。
看起来这应该是内置的,发送http请求并检查响应代码或正文的批量比较。我不需要深入研究XML响应本身。这是我实际上可以编写脚本(bash / curl)的东西,但我宁愿使用Fitnesse,因为我们将它用于其他一些东西。
我使用的是fitnesse的Java版本,而不是C#(FitSharp)版本。
我在没有成功的情况下一直在寻找,但我希望我在Fitnesse本身或者我可以支持的普通第三方罐子中错过了它。
答案 0 :(得分:3)
我推荐RestFixture。尽管名称是一个非常简单的HTTP客户端 - 您可以制作任何HTTP请求,然后检查返回的响应:状态代码,标题(使用正则表达式检查您感兴趣的标题)和body(使用XPath或JavaScript期望来检查您感兴趣的节点)。根据Content-Type标头的值处理XML或JSON。处理几乎所有HTTP动词:GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE。不要以为它会处理PATCH。
我刚开始玩Fried Hoeben的HttpTest灯具,XmlHttpTest和JsonHttpTest(参见Fried在这个帖子的其他地方的回答)。它们似乎比RestFixture具有更多的功能。例如,它们支持模板,允许您发送与嵌入在正文中的某些值相同的重复请求。您只需指定一次模板,然后列出每次调用时传入的值,避免每次都重复指定整个请求体。
另一方面,对于简单的Web服务调用,我认为RestFixture更易于使用。
RestFixture很容易记住,因为它实际上只有三种类型的命令:
1)set:setHeader和setBody。用于指定HTTP请求的标头或正文;
2)let:为变量赋值;
3)HTTP Verbs:发送HTTP请求。
这就是我喜欢RestFixture的原因 - 所有HTTP谓词的语法都是相同的:
| verb | uri | ?responseStatusCode | ?responseHeaders | ?responseBody |
您指定HTTP谓词,发送请求的URI,您期望的响应状态代码,您要检查的响应标头(省略您不想测试的任何标头;正则表达式可以是used)和响应主体中的节点进行检查。
我认为,对每个HTTP动词使用相同的语法可以进行非常干净的测试。
| Import |
| smartrics.rest.fitnesse.fixture |
|Table: Rest Fixture | http://localhost:9876 |
| setBody | <resource><name>a name</name><data>data</data></resource> |
| POST | /resources/ | 201 | | no-body |
| let | id | header | Location:/resources/(.+) | |
| Table: Rest Fixture | http://localhost:9876 |
| GET | /resources/%id% | 200 | Content-Type : application/xml | !- /resource/name[text()='a name']
/resource/data[text()='data'] -! |
此测试通过POST生成新项目,读取新项目的ID并将其分配给变量,然后将该ID值与GET一起使用以验证新项目是否存在并包含正确的数据。
POST请求期望响应具有201状态代码且没有正文。 GET请求期望响应具有200状态代码和Content-Type标头设置为application / xml。它希望正文的名称节点设置为&#34;名称&#34;并且数据节点设置为&#34;数据&#34;。
此示例适用于RESTful Web服务,但RestFixture也适用于SOAP。你为POST指定的主体会更大。
RestFixture可以在http://github.com/smartrics/RestFixture找到。它包含文档链接和大量示例。
以下是使用Maven构建和安装RestFixture的说明:workflow of creating tests using RestFixture
来自.NET背景但没有任何Maven经验,我发现最简单的安装方法是将其添加到现有的FitNesse安装中:
1)从http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22smartrics-RestFixture%22
下载Maven Central的压缩二进制文件2)将zip文件解压缩到FitrNesseRoot目录旁边的目录(该目录不应该在FitNesseRoot下)。为了示例,我们调用目录 RestFixtureLib (实际上您可以将目录命名为任何您喜欢的名称);
3)在 RestFixtureLib 目录中删除FitNesse- {version} .jar文件,因为我们已经安装了FitNesse;
4)在包含RestFixture测试的测试页面中,将RestFixtureLib目录添加到类路径中:
!path RestFixtureLib/*.jar
(或者解压缩RestFixture的目录的路径)
如果您要在多个页面上使用RestFixture,则此类路径定义可以包含在套件页面或根页面中。
5)RestFixture可以与FIT或SLIM测试系统一起使用。如果使用SLIM在测试页面中包含以下定义:
!define TEST_SYSTEM {slim}
6)如果你在测试页面的顶部导入RestFixture命名空间,它会使测试变得不那么冗长:
| Import |
| smartrics.rest.fitnesse.fixture |
然后您可以使用
定义测试|Table: Rest Fixture | ... |
| ... |
答案 1 :(得分:1)
我的fixture library使用its XmlHttpTest fixture支持SOAP调用。
使用此方法进行的示例测试,其中请求完全在wiki中(scenarios和templates也可用于配置要发送的请求):
!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 |
实际测试输出可以在example report。
中看到答案 2 :(得分:0)
FitNesse本身对您想要测试的内容非常不了解。因此它没有开箱即用的SOAP库。我们通过包装javax.xml.soap类来实现自己的。不幸的是,我无法分享该代码。我可以告诉你,它并不是非常复杂。
您可以在此处找到这些类的简单SOAP调用的基础知识:http://www.java2s.com/Code/Java/J2EE/ThisexampledemonstratesahelloworldexampleforusingJAXMAPI.htm