我正在开发一个具有RESTful API的服务。该API基于JSON,并使用硬件实现资源之间的HATEOAS链接。
实现与问题无关,但我使用的是Java和Spring。
一些例子要求:
GET /api/projects
{
"_links" : {
"self" : {
"href" : "example.org/api/projects"
},
"projects" : [ {
"href" : "example.org/api/projects/1234",
"title" : "The Project Name"
}, {
"href" : "example.org/api/projects/1235",
"title" : "The Second Project"
} ]
},
"totalProjects" : 2,
}GET /api/projects/1234
{
"_links" : {
"self" : {
"href" : "example.org/api/projects/1234"
},
"tasks" : [ {
"href" : "example.org/api/projects/1234/tasks/543",
"title" : "First Task"
}, {
"href" : "example.org/api/projects/1234/tasks/544",
"title" : "Second Task"
} ]
},
"id" : 1234,
"name" : "The Project Name",
"progress" : 60,
"status" : "ontime",
"targetDate" : "2014-06-01",
}现在,我应该如何测试对单个项目的GET请求?我有两个选择,我不知道哪一个更好:
/api/projects/{projectId},用模拟服务层期望/返回的项目id替换{projectId}。/api/projects/,然后测试响应中返回的链接。因此,测试将不使用/api/projects/{projectId}硬编码。第一个选项使测试变得更简单,但它基本上是硬编码URL,这是HATEOAS最初设计要避免的事情。如果我出于某种原因更改URL结构,那么测试也需要更改。
第二个选项在HATEOAS意义上更“正确”,但测试将更加复杂;我需要遍历所有父资源来测试子资源。例如,要测试对任务的GET请求,我需要请求/api/projects/,获取到/api/projects/1234的链接,请求它,获得到/api/projects/2345/tasks/543的链接,最后测试它!如果我这样测试的话,我还需要在每次测试中模拟更多。
第二个选项的优点是我可以自由地更改URL,而无需更改测试。
发布于 2014-03-24 12:41:39
如果您的目标是测试超媒体API,那么您的测试工具需要了解如何处理和处理包含在资源中的超媒体。
是的,挑战在于你决定穿越链接层次的深度。此外,您还需要考虑非获取方法。
如果这些是自动化测试,那么策略就是在资源单元中组织测试。只测试在所测试的资源中返回的链接:一个用于项目的模块,以及用于项目、任务、任务等的其他模块。这确实需要对每个模块的著名URL进行一些硬编码,但是可以让您更容易地围绕资源模型管理测试。
发布于 2016-01-27 09:02:42
我不知道是怎么回事。但我能说的是。
您可以尝试一个拍 -一个基于perl、基于卷曲的DSL,用于web、rest服务测试自动化。Swat的目的是简化URL“杂耍”,您可能在这里谈论。关于SWAT如何做到这一点的快速参考(一种海峡前进的方式,但有更优雅的解决方案):
$ mkdir -p api/project/project_id
$ echo '200 OK' > api/project/project_id/get.txt
$ nano api/project/project_id/hook.pm
modify_resource(sub{
my $r = shift; # this is original rout api/project/project_id/
my $pid = $ENV{project_id};
$r=~s{/project_id}{$pid} # dynamically setup route to api/project/{project_id}
return $r;
});
$ project_id=12345 swat http://your-rest-api # run swat test suite!一个更复杂的例子可以在文档上找到。
(*)披露--我是工具作者。
发布于 2016-02-02 14:12:31
如果您使用Spring,您可以使用ControllerLinkBuilder (http://docs.spring.io/autorepo/docs/spring-hateoas/0.19.0.RELEASE/api/org/springframework/hateoas/mvc/ControllerLinkBuilder.html)在您的测试中创建链接,如http://docs.spring.io/spring-hateoas/docs/0.19.0.RELEASE/reference/html/#fundamentals.obtaining-links中所述。对于ControllerLinkBuilder,没有硬编码的URL-s。
ControllerLinkBuilderUnitTest.java (https://github.com/spring-projects/spring-hateoas/blob/4e1e5ed934953aabcf5490d96d7ac43c88bc1d60/src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java)演示了如何在测试中使用ControllerLinkBuilder。
https://stackoverflow.com/questions/22496830
复制相似问题