在Java中测试REST服务的最佳方法是什么?开发人员通常采用哪些方法和工具集?
此外,如果您正在编写调用第三方REST服务的其他客户端。测试REST客户端的最佳方法是什么?您是否拥有与第三方REST服务通信的JUnit测试。您可能会遇到服务无法使用的风险/或生产REST服务无法在没有特定凭据的情况下访问。
答案 0 :(得分:3)
<强> 1。在Java中测试REST服务的最佳方法是什么?开发人员通常采用哪些方法和工具集?
<强> 2。此外,如果您正在编写调用第三方REST服务的其他客户端。测试REST客户端的最佳方法是什么?您是否拥有与第三方REST服务通信的JUnit测试。您可能会遇到服务无法使用的风险/或者生产REST服务无法在没有特定凭据的情况下访问。
了解REST如何工作以及HTTP通常是一个很好的起点。
答案 1 :(得分:2)
有多种方法可以测试REST API,具体取决于您的需求:
答案 2 :(得分:1)
您可以使用SoapUI创建REST服务模拟。此外,如果您需要通过maven运行此测试,您可以使用soapui-maven-plugin自动实现soapui服务
答案 3 :(得分:0)
我建议您查看REST Assured以自动测试REST服务。以下示例是从web page复制的:
例如,如果您的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));
}
有关详细信息,请参阅getting started和usage指南。
如果您使用Spring Boot实现了服务器应用程序,那么您可能还会发现几年前我写的有关Integrating Testing a Spring Boot Application的博文。它显示了Spring Boot测试支持如何启动嵌入式Web服务器并在针对REST API执行基于REST Assured的测试之前将应用程序部署到该服务器。换句话说,您既不必手动启动Web服务器,也不需要在测试之间重新部署应用程序。事实上,您甚至不必在代码更改之间创建.war或.jar文件,以验证REST API更改。
答案 4 :(得分:0)
对于问题的第2部分,正确的答案取决于各种因素。您可能需要考虑模拟的分辨率以及编写和维护测试所花费的时间。
客户端库
HTTP客户端的选择会影响您的选择 - 一些klients(如Spring RestTemplate)提供内置的模拟支持。如果您有像swagger或RAML文件这样的服务定义,那么您需要生成客户端。
项目配置
最彻底的方法是实际让应用程序对真实端点进行HTTP调用,涉及完整堆栈。如果是这样,请配置项目,以便以每个环境(或配置文件)方式注入客户端URL。
模拟端点
你想要每单元测试模拟。没有'可部署的模拟'可以进行多个单元测试。服务在localhost端口上进行模拟 - 最好是随机选择,以便可以进行并行测试(即在jenkins上)。
模拟数据
为了节省时间,对于深度数据结构,非常希望从文件中读取模拟数据,而不是以编程方式构造。文件更容易使用,特别是如果您启用请求/响应日志记录,修复错误等等更快。
<强>嘲讽强>
某些框架与服务松散耦合,因为他们严格意识不到服务的性质。通常,您会在单元测试中编码的某个路径上模拟响应。这就像Wiremock和我见过的大多数测试框架。
虽然其他工具直接在类服务定义上工作,但基本上你可以使用像Mockito这样的工具来直接模拟对象(但是包装在真正的端点中)。这应该不易出错,但需要存在类(作为测试依赖性)。为了比较,我写了这样的a tool。
答案 5 :(得分:0)
Karate是一个从头开始设计用于测试Web服务API的框架。它在Stack Overflow上有own tag。
与REST保证here进行了详细比较。它也被列为one of the top 5开源API测试工具,仅在发布后的6个月内。
免责声明:我恰好是空手道的作者。
答案 6 :(得分:-1)
Karate是一个从头开始设计用于测试Web服务API的框架。它在Stack Overflow上有own tag。
与REST保证here进行了详细比较。它也被列为one of the top 5开源API测试工具,仅在发布后的6个月内。
免责声明:我恰好是空手道的作者。