测试REST Web服务

63

我的组织正在使用JBoss应用服务器构建RESTful Web服务。 到目前为止,QA团队已经习惯了使用SoapUI测试SOAP Web服务。SoapUI有一个新版本具有REST功能。我们正在考虑使用它。

  1. 是否有任何可供免费测试的公共RESTful服务可在互联网上获得?
  2. 有哪些工具可用于测试RESTful Web服务?
1. 是否有免费的公共RESTful服务可供测试?
可能有一些免费的公共RESTful服务可供测试,例如GitHub API和Twitter API。
2. 有哪些工具可用于测试RESTful Web服务?
常用的测试RESTful Web服务的工具包括Postman、RestAssured和SoapUI(带有REST插件)。

关于标题“测试REST web服务”...我希望你的意思是“测试”,而不是在暗示Tet攻势(谈论加固服务器的难度!) - micahwittman
我是说测试,当然了。感谢micahwittman和Chris修复它。 - anjanb
24个回答

28

也许soapUI能用,但我无法确定,因为它在我的Ubuntu机器上经常崩溃,导致Eclipse崩溃并使我失去任何未保存的工作。我已经尝试了所有通常的解决方法。独立版更糟糕。 - Dave

25

请尝试使用Firefox插件Poster,它易于使用且能快速启动您的工作。


3
实际上,我收回我的+1。在检查Poster发送的流量时,它是格式错误的,这会导致我的网络服务出现问题。当你添加参数并执行POST或PUT操作时,它实际上不会发送这些参数,并且除非你显式添加内容,否则它不会发送内容类型。 - Earlz

20

你可以使用相当简单的Python代码来调用Web服务。取决于您的安全设置,您可以简单地使用Python的urlliburllib2来执行REST请求并检查响应。

此外,您可能希望使用Python unittest来控制对REST服务的测试执行。

class TestSomeREST( unittest.TestCase ):
    def setUp(self):
        REALM = "blah@blah.com"
        self.client= RESTClient( "localhost", 18000, "tester", "tester", REALM )
    def test_1_get(self):
        response = self.client.get('/this/that/other/2/')
        self.failUnlessEqual(200, response.status_code)
        j1= JSONDecoder().decode(response.content)
        self.assertEquals(2, j1[0]['pk'] )
        entity= j1[0]['fields']
        self.assertEquals('Some Other Group', entity['name'])
        self.assertEquals('E1G2', entity['customer_id'])

RESTClient类使用urllib2来为每个请求通过摘要认证。它相当复杂,但如果感兴趣的话,我可以分享其本质。


12

8

要测试REST服务,你可以尝试使用REST Assured,它可以让你非常简单地在Java中测试REST服务并验证响应(使用JUnit或TestNG)。


8
CURL可以帮你完成一半的工作。另一半是检查头部、响应代码和实体内容以确保它们是好的。你可以使用各种工具来完成这个任务(在shell脚本领域,将头部和内容导出到文件中并进行比较可能是一个不错的选择)。通过将curl与您选择的单元测试框架堆叠起来,进一步完善工具集也不难。
我使用AJAX构建了一个REST Web服务测试面板。实际上,这并不难。您需要解决一些安全问题(例如确保测试套件位于同一服务器上或签名JavaScript)。

1
是的,CURL规则适用于REST测试。http://curl.haxx.se/ - bortzmeyer

8

6

测试 RESTful Web 服务最简单的方法是在终端中使用 curl 命令。

以下是我用来测试 Rails Web 服务的一些代码。你可以根据自己的服务进行修改。

GET 请求

curl http://localhost:3000/courses.json

POST

curl -H "Content-Type:application/json"  -d '{"courseCode":"55555","courseName":"SEEEE","courseYr":999}' http://localhost:3000/courses.json

Rails中的PUT: 例1(带有所有字段):

curl -H "X-Http-Method-Override: put" -H "Content-Type:application/json"  -d '{"courseCode":"123456","courseName":"AAAAAAAA","courseYr":12345}' http://localhost:3000/courses/5.json

示例2(仅编辑字段):

curl -H "X-Http-Method-Override: put" -H "Content-Type:application/json"  -d '{"courseYr":999999999}' http://localhost:3000/courses/3.json

使用提供的id在Rails中执行DELETE操作

 curl -H "X-Http-Method-Override: delete" -H "Content-Type:application/json"  -d '{"id":4}' http://localhost:3000/courses/5.json

4

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接