在 Java 中测试 REST 服务的最佳方法

ser*_*rah 6 java rest web-services

  1. 在 Java 中测试 REST 服务的最佳方法是什么?开发人员通常采用哪些方法和工具集?

  2. 此外,如果您正在编写调用第三方 REST 服务的 REST 客户端。测试 REST 客户端的最佳方法是什么。您是否有与第三方 REST 服务通信的 JUnit 测试。您可能会遇到服务不可用/或生产 REST 服务在没有某些凭据的情况下无法访问的风险。

mat*_*sev 5

我建议您查看 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]
         }
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以轻松地使用 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));

}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅入门使用指南。


如果您已经使用 Spring Boot 实现了您的服务器应用程序,您可能还会发现我几年前写的关于集成测试 Spring Boot 应用程序的博客文章很有趣。它展示了 Spring Boot 测试支持如何在针对 REST API 执行基于 REST Assured 的测试之前启动嵌入式 Web 服务器并将应用程序部署到它。换句话说,您既不需要手动启动 Web 服务器,也不需要在测试之间重新部署应用程序。事实上,您甚至不必在代码更改之间创建 .war 或 .jar 文件来验证 REST API 更改。