![](/img/trans.png)
[英]Java 8 - Best way to read and store a file received in REST service
[英]Best way to test a REST service in java
在Java中测试REST服务的最佳方法是什么? 开发人员通常采用哪些方法和工具集?
此外,如果您正在编写调用第三方REST服务的其他客户端。 测试REST客户端的最佳方法是什么? 您是否拥有与第三方REST服务通信的JUnit测试。 您可能会遇到服务无法使用的风险/或生产REST服务无法访问而无需某些凭据。
1.在Java中测试REST服务的最佳方法是什么? 开发人员通常采用哪些方法和工具集?
2.此外,如果您正在编写调用第三方REST服务的其他客户端。 测试REST客户端的最佳方法是什么? 您是否拥有与第三方REST服务通信的JUnit测试。 您可能会遇到服务无法使用的风险/或生产REST服务无法访问而无需某些凭据。
了解REST如何工作以及HTTP通常是一个很好的起点。
有几种方法可以测试REST API,具体取决于您的需求:
您可以使用SoapUI创建REST服务模拟。 此外,如果您需要通过maven运行此测试,您可以使用soapui-maven-plugin自动执行soapui服务
我建议您查看REST Assured以自动测试REST服务。 以下示例从其网页复制:
例如,如果您的HTTP服务器在“ http:// localhost:8080 / lotto / {id}”处返回以下JSON:
{
"lotto":{
"lottoId":5,
"winning-numbers":[2,45,34,23,7,5,3],
"winners":[
{
"winnerId":23,
"numbers":[2,45,34,23,3,5]
},
{
"winnerId":54,
"numbers":[52,3,12,11,18,22]
}
]
}
}
您可以轻松使用REST Assured从响应中验证有趣的事物:
@Test public void
lotto_resource_returns_200_with_expected_id_and_winners() {
when().
get("/lotto/{id}", 5).
then().
statusCode(200).
body("lotto.lottoId", equalTo(5),
"lotto.winners.winnerId", containsOnly(23, 54));
}
如果您使用Spring Boot实现了服务器应用程序,那么您可能还会发现几年前我写的有关集成测试Spring Boot应用程序的博客文章。 它显示了Spring Boot测试支持如何启动嵌入式Web服务器并在针对REST API执行基于REST Assured的测试之前将应用程序部署到该服务器。 换句话说,您既不必手动启动Web服务器,也不需要在测试之间重新部署应用程序。 事实上,您甚至不必在代码更改之间创建.war或.jar文件,以验证REST API更改。
对于问题的第2部分,正确的答案取决于各种因素。 您可能需要考虑模拟的分辨率以及编写和维护测试所花费的时间。
客户端库
HTTP客户端的选择会影响您的选择 - 一些klients(如Spring RestTemplate)提供内置的模拟支持。 如果您有像swagger或RAML文件这样的服务定义,那么您需要生成客户端。
项目配置
最彻底的方法是实际让应用程序对真实端点进行HTTP调用,涉及完整堆栈。 如果是这样,请配置项目,以便以每个环境(或配置文件)方式注入客户端URL。
模拟端点
你想要每单元测试模拟。 没有'可部署的模拟'可以进行多个单元测试。 服务在localhost端口上进行模拟 - 最好是随机选择,以便可以进行并行测试(即在jenkins上)。
模拟数据
为了节省时间,对于深度数据结构,非常希望从文件中读取模拟数据,而不是以编程方式构造。 文件更容易使用,特别是如果您启用请求/响应日志记录,修复错误等等更快。
惩戒
一些框架与服务松散耦合,因为它们严格不了解服务的性质。 通常,您会在单元测试中编码的某个路径上模拟响应。 这就像Wiremock和我见过的大多数测试框架。
虽然其他工具直接在类服务定义上工作,但基本上你可以使用像Mockito这样的工具来直接模拟对象(但是包装在真正的端点中)。 这应该不易出错,但需要存在类(作为测试依赖性)。 为了比较,我写了一个这样的工具 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.