测试JSON客户端 – 服务器API的推荐方法是什么?

编辑#2:有没有人有一个很好的方法来测试客户端 – 服务器应用程序的“中间”,我们可以拦截请求和响应,根据需要伪造客户端或服务器,并提供api的自我文档?

在许多情况下,黄瓜可能是一个很好的解决方案,但它并不是我想要的。 而这个中间层应该是客户端/服务器实现不可知的。 (例如,黑盒子)。


我们的客户端 – 服务器模型是带有Flex客户端的ruby-on-rails服务器,使用带有JSON作为数据格式的RESTish接口。 因此,客户端发布到服务器的任何内容通常都是单个JSON参数。 服务器做它的事情并用纯JSON模型响应。

我们在服务器上进行了标准的rails测试,我们正在努力在客户端上完成正确的FlexUnit测试(它是一个移动的目标)。 但是,我的团队对当前测试模型的有效性存在争议,因为服务器上的每个更改似乎都会破坏API的一部分。 这告诉我,API通信存在问题(团队成员之间,代码中的自我文档等),以及缺乏正确的API健全性测试。

所以我一直在质疑我们是否需要一个模拟客户端来测试纯JSON级别的服务器(没有富客户端的所有其他复杂性),并且可能是一个模拟服务器用于与富客户端做同样的事情。 这有两个目的,即记录API并提供对API本身的更全面的测试。

有争议的原因是rails人员声称rails集成测试足以测试所有服务器请求,而中间测试环境只是多余的。

所以这里的问题是,鉴于我们的情况,应该如何自我记录API,以及我们应该如何测试API本身?

编辑:

我们有像/foo/444/bar.js这样的路由,但参数实际上可以是任何复杂的JSON字符串,具体取决于操作,例如:

json={ "foo":{ "x":1, "y":2 }, "bar":[1,2,3,4,5] } 

但除了手动编辑的API文档外,没有自我文档。 rails控制器通常只是反序列化并将更改直接应用于模型。 很高兴有一些常见的测试来告诉我们什么时候改变, 以及预期的结果。

我刚开始看这个名为Maxq的Webfunction测试工具,我认为它有可能解决您的问题,Maxq充当您的Web客户端和服务器应用程序之间的代理服务器。 它位于Junit之上,这意味着您可以通过声明对服务器应用程序的调用的行为和响应来对您的API进行适当的unit testing。 它基本上捕获并记录您从Web客户端发出的所有请求以及从服务器返回的响应,它还能够生成您的请求的测试脚本,您可以使用这些脚本在任何服务器上进行回放和测试。

你应该尝试一下http://maxq.tigris.org/

你可以把它想象成两个不同的项目..如果你有两个项目,你会写两个独立的测试套件吗?

您应该首先在服务器和客户端之间建立API, 就好像在开始实现后团队之间没有任何通信一样。

然后构建使用API​​的客户端和生成API的服务器(如果是TDD,则首先构建测试)。

对于测试,一个团队需要一个模拟服务器来提供虚假的API响应来测试客户端,另一个团队需要测试服务器的生成数据(即,第二个团队使用ails集成测试,就像你的rails人员声称)

我会推荐Cucumber。 它允许您通过模拟浏览器为您的应用程序编写特定的测试。 这样您就可以轻松发送请求并validationJSON响应。

你可以这样做的一种方法是使用rspec进行控制器测试(你也可以使用test :: unit)

 describe PersonApiController # GET /person/1.json it "should respond with a person" do person = Person.create(:name => "scott") get :show, :id => person.id, :format => 'json' response.should be_success response.body.should have_selector('name', :content => person.name) end end