1

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

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

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

我四处寻找但没有成功,但我希望我在 Fitnesse 本身或我可以加入支持这一点的常见 3rd 方罐中以某种方式错过了它。

4

3 回答 3

3

我推荐 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 | ... |
| ...                      |
于 2016-10-31T09:15:15.523 回答
1

我的夹具库支持 SOAP 调用,使用它的 XmlHttpTest 夹具

使用这种方法的示例测试,其中请求完全在 wiki 中(场景模板也可用于配置要发送的请求):

!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                 |

实际测试输出可以在示例报告中看到。

于 2016-06-30T15:36:26.993 回答
0

FitNesse 本身对您想要测试的内容非常不可知。因此,它没有开箱即用的 SOAP 库。我们通过包装 javax.xml.soap 类来实现我们自己的。不幸的是,我无法共享该代码。我可以告诉你,这并不复杂。

您可以在此处找到使用这些类的简单 SOAP 调用的基础知识:http ://www.java2s.com/Code/Java/J2EE/ThisexampledemonstratesahelloworldexampleforusingJAXMAPI.htm

于 2012-10-16T00:42:05.590 回答