如何调试RESTful服务?

时间:2020-03-06 15:03:42  来源:igfitidea点击:

我正在寻找一种调试RESTful服务的简便方法。例如,大多数Web应用程序都可以使用普通的Web浏览器进行调试。不幸的是,同一浏览器不允许我测试HTTP PUT,DELETE,并且在某种程度上甚至无法测试HTTP POST。

我不希望自动化测试。我想通过快速的完整性检查来运行新服务,理想情况下无需编写自己的客户端。

解决方案

我们可以使用Fiddler的Composer调试静态服务。

更新的JD 2013年9月12日:Rest Builder现在称为Composer。

使用现有的" REST客户端"工具(例如RESTClient)可以轻松检查请求和响应。

除了使用彼得·希尔顿的回应中的一种工具之外,我不得不说,使用LWP或者类似工具编写测试脚本可能是我们唯一的选择。我们可以通过打开套接字,发送原始HTTP请求并检查我们得到的回报来绕过LWP的使用。但是据我所知,缺乏针对此类领域的测试工具,主要是从网站开发人员的角度来看待这个问题空间,对于他们来说,浏览器足以作为一个测试平台。

cURL可以正常工作。

我使用restclient(可从Google Code获得)。这是一个简单的Java Swing应用程序,它支持所有HTTP方法,并允许我们完全控制HTTP标头,连接等。

我倾向于使用Jersey附带的不错的REST客户端编写RESTful资源的单元测试。不错的事情是,如果我们使用JAX-RS实现RESTful资源,那么Jersey客户端可以重用实体提供程序,例如JAXB / XML / JSON / Atom等,以便我们可以在服务器端重用相同的对象在客户端进行单元测试。

例如,这是来自Apache Camel项目的单元测试用例,它从RESTful资源(使用JAXB对象Endpoints)中查找XML有效负载。在此基类中定义了resource(uri)方法,该方法仅使用Jersey客户端API。

例如

clientConfig = new DefaultClientConfig();
client = Client.create(clientConfig);

resource = client.resource("http://localhost:8080");
// lets get the XML as a String
String text = resource("foo").accept("application/xml").get(String.class);

在我公司,我们使用各种不同的工具和方法来测试RESTful服务:

  • 我们编写cURL脚本-本质上是保存在文件中的单个命令。每种方法每个资源一个文件。对于PUT和POST,我们通常会包含一些文件,这些文件包含要与cURL脚本一起发送的表示。例如,对于邮箱资源,我们可能有一个名为mailbox_post.cmd的文件,其中可能包含curl -v -X POST -u username -H'Content-Type:application / xml'-d @mailbox_post行.xml http:// service / mailbox。我们之所以喜欢这种方法,是因为我们最终构建了可以批量运行或者至少在测试人员之间传递并用于回归测试的测试集合。
  • 我们使用cURL和RESTClient进行临时测试
  • 默认情况下,我们有服务于XHTML的服务,因此它是可浏览的,并添加了表单资源,因此该服务实际上可以使用浏览器进行部分或者完全可测试。这部分受到RESTful Web服务某些部分的启发,其中作者表明,Web服务和Web应用程序之间的界线可能不需要像通常所假设的那样牢固和严格。
  • 我们使用Restlet框架将功能测试编写为Groovy闭包,并使用测试运行器Groovy脚本运行测试。这很有用,因为测试可以是有状态的,可以相互构建,并且可以在适当时共享变量。我们发现Restlet的API简单直观,因此可以轻松编写快速的HTTP请求和测试响应,并且在Groovy中使用时甚至更加容易。 (我希望很快在我们的博客上分享这项技术,包括测试运行器脚本。)

如果我们正在运行OS X Leopard,我发现该工具很有用:

HTTP客户端

这是一个非常简单的GUI程序,可让我们向资源提出http请求并查看响应。

Firefox的RESTTest(添加)。 IE的提琴手。

如果我们想要具有相同目的的免费工具以及多部分表单数据提交的其他功能,请访问http://code.google.com/a/eclipselabs.org/p/restclient-tool/