休息顶部

通过参考,使用Spring 5和Spring Boot 2开始学习春天课程:

>>查看课程

1.概述

本教程侧重于基本原理和力学使用Live Integration测试测试REST API(带有JSON有效载荷)。

主要目标是提供一个关于测试API基本正确性的介绍-我们将使用最新版本的github休息api.对于例子。

对于内部应用程序,这种测试通常会在连续集成过程中作为延迟步骤运行,在已经部署后消耗REST API。

在测试REST资源时,通常存在几个正交职责,测试应专注于:

  • http.响应代码
  • 其他http.在响应中
  • 有效载荷(JSON,XML)

每个测试应该只关注单一的职责,并包含单一的断言。专注于清晰的分离总是有益处,但是在做这种黑匣子测试时更重要,因为一般倾向是在一开始就编写复杂的测试场景。

整合测试的另一个重要方面是坚持单一水平的抽象原则- 测试中的逻辑应以高电平写入。创建请求,将HTTP请求发送到服务器的详细信息,不应通过实用程序方法完成处理IO等。

进一步阅读:

春季集成测试

为Spring Web应用程序编写集成测试的快速指南。

Spring Boot测试

了解Spri金宝搏官网188beng启动如何支持测试,有效地写入单元测试。

休息的指南

探索REST-assured的基础——一个简化REST api测试和验证的库。

2.测试状态代码

@test public void voideduserdoesnotexists_whenuserinfoisretricle_then404isreceive()抛出client procolocoxception,ioException {//给定字符串名称= randomstringutils.randomalphet(8);httpurirequest请求= new httpget(“https://api.github.com/users/”+ name);//当httpresponse httpresponse = httpclientbuilder.create()。build()。执行(请求);//然后assertthat(httpresponse.getstatuslineLine()。getstatuscode(),等于(httpstatus.sc_not_found));}

这是一个相当简单的测试 -它验证了一个基本的快乐路径正在运作,而不会给测试套件增加太多的复杂性。

如果无论出于何种原因,它会失败,那么无需查看此URL的任何其他测试,直到它是固定的。

3.测试媒体类型

@test public void todrequestwithnoacceptheader_whenrequestisexecuted_thendefaultresponseContenttypeisjson()抛出client procolocoxception,ioException {//给定String jsonmimetype =“application / json”;httpurirequest请求= new httpget(“https://api.github.com/users/eugenp”);//当httpresponse响应= httpclientbuilder.create()。build()。执行(请求);// then string mimetype = contentType.getOrdefault(response.getentity())。getMimetype();assertequals(jsonmimetype,mimetype);}

这确保了响应实际上包含了JSON数据。

正如你可能已经注意到的那样,我们关注测试的逻辑进展-首先是响应状态码(以确保请求是OK的),然后是响应的媒体类型,只有在下一个测试中我们才会查看实际的JSON负载。

4.测试JSON有效负载

@Test public void givenUserExists_whenUserInformationIsRetrieved_thenRetrievedResourceIsCorrect() throws ClientProtocolException, IOException{//给定HttpUriRequest request = new HttpGet("https://api.github.com/users/eugenp");//当httpresponse响应= httpclientbuilder.create()。build()。执行(请求);// Then GitHubUser resource = RetrieveUtil。retrieveResourceFromResponse(响应,GitHubUser.class);为了(“eugenp”,匹配器。是(resource.getLogin()));}

在这种情况下,我知道github资源的默认表示是json,但通常是内容类型响应的标题应与接受请求头——客户端通过请求特定类型的表示接受,这是服务人员应该尊重的。

5.公用事业公司进行测试

我们将使用Jackson 2将原始JSON字符串联原体中的java实体:

public class GitHubUser {private String login;//标准的getter和setter}

我们只使用了一个简单的工具来保持测试的干净、可读性和高层次的抽象:

公共静态 t retreveresourcefromresponse(httpresponse响应,class  clazz)抛出ioException {string jsonfromresponse = entityutils.tostring(response.getentity());objectMapper映射器= new objectmapper().configure(deserializationfeature.fail_on_unknown_properties,false);返回mapper.readvalue(jsonfromresponse,clazz);}

请注意,杰克逊忽略了未知的财产GitHub API正在发送我们的方式 - 这只是因为GitHub上的用户资源的表示变得非常复杂 - 我们不需要此处的任何信息。

6.依赖关系

这些工具和测试使用了以下库,这些库都可以在Maven中心中使用:

7.结论

这只是完整的整合测试套件应该是什么的一部分。测试专注于确保其余API的基本正确性,不进入更复杂的情景,

例如,以下未涵盖以下内容:API的可发现性,相同资源的不同表示的消耗等。

可以找到所有这些示例和代码片段的实现在github上-这是一个基于maven的项目,所以它应该很容易导入和运行。

休息底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程 :

>>查看课程
2评论
最古老的
最新的
内联反馈
查看所有评论
对这篇文章的评论关闭!