我推荐 RestFixture。尽管名称很简单,但它是一个非常简单的 HTTP 客户端 - 您可以制作任何 HTTP 请求,然后检查返回的响应:状态代码、标头(使用正则表达式检查您感兴趣的标头)和正文(使用 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)设置:setHeader和setBody。用于指定 HTTP 请求的标头或正文;
2) let:用于给变量赋值;
3) HTTP 动词:发送一个 HTTP 请求。
这就是我喜欢 RestFixture 的原因——所有 HTTP 动词的语法都是相同的:
| verb | uri | ?responseStatusCode | ?responseHeaders | ?responseBody |
您指定 HTTP 动词、将请求发送到的 URI、您期望的响应状态代码、您想要检查的响应标头(省略您不想测试的任何标头;可以使用正则表达式)和节点在响应正文中进行检查。
我认为,对每个 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 状态代码和设置为 application/xml 的 Content-Type 标头。它期望正文将名称节点设置为“名称”,并将数据节点设置为“数据”。
此示例适用于 RESTful Web 服务,但 RestFixture 也适用于 SOAP。您为 POST 指定的正文会更大。
安装使用
RestFixture 可以在http://github.com/smartrics/RestFixture找到。它包括指向带有大量示例的文档的链接。
以下是使用 Maven 构建和安装 RestFixture 的说明:使用 RestFixture 创建测试的工作流程
然而,来自没有任何 Maven 经验的 .NET 背景,我发现安装它的最简单方法是将其添加到现有的 FitNesse 安装中:
1) 从 Maven Central 下载压缩的二进制文件,位于http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22smartrics-RestFixture%22
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 | ... |
| ... |