Fitnesse简单的http请求/响应?

时间:2012-10-15 22:32:28

标签: java fitnesse

我有一些SOAP请求,我想要一个Fitnesse页面,它将执行请求并验证我得到了一个响应(要么只是检查它是200 OK还是检查返回的SOAP响应)。简而言之,我使用它来重放一系列SOAP请求并验证它们是否有效,就像部署后的冒烟测试一样。

看起来这应该是内置的,发送http请求并检查响应代码或正文的批量比较。我不需要深入研究XML响应本身。这是我实际上可以编写脚本(bash / curl)的东西,但我宁愿使用Fitnesse,因为我们将它用于其他一些东西。

我使用的是fitnesse的Java版本,而不是C#(FitSharp)版本。

我在没有成功的情况下一直在寻找,但我希望我在Fitnesse本身或者我可以支持的普通第三方罐子中错过了它。

3 个答案:

答案 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概述

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中(scenariostemplates也可用于配置要发送的请求):

!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