在Eclipse中高效运行HTTP / REST集成测试

本文介绍了如何在Eclipse中使用PDE JUnit启动配置与restfuse库结合,以方便地运行HTTP/REST集成测试。通过设置无头模式、配置服务器端口和使用测试套件,可以避免手动启动服务器,简化测试流程。这种方法也适用于基于Maven/Tycho的构建。
摘要由CSDN通过智能技术生成

最近,我有机会使用由我亲爱的Holger Staudacher编写的OSGi-JAX-RS-Connector库。 通过连接器,您可以通过将@Path注释的类型注册为OSGi服务来轻松发布资源-实际上,它工作得很好。

对于我来说,使用普通的JUnit测试编写驱动的服务类测试是很自然的事,但提供附加的集成测试也很重要。 这些测试允许检查此类服务的运行时可用性和功能。 为了提供后者,我使用了Holger编写的另一个小助手– restfuse ,它是用于自动HTTP / REST测试的JUnit扩展。

该场景看起来像这样:

服务

@Path( '/message' )
public class SampleService {

  @GET
  @Produces( MediaType.TEXT_PLAIN )
  public String getMessage() {
    return 'Hello World';
  }
}

一个JUnit测试用例

public class SampleServiceTest {

  @Test
  public void testGetMessage() {
    SampleService service = new SampleService();

    String message = service.getMessage();

    assertEquals( 'Hello World', message );
  }
}

服务注册

<?xml version='1.0' encoding='UTF-8'?>
<scr:component
  xmlns:scr='http://www.osgi.org/xmlns/scr/v1.1.0'
  name='SampleService'>
   <implementation class='sample.SampleService'/>
   <service>
      <provide interface='sample.SampleService'/>
   </service>
</scr:component>

Restfuse集成测试

@RunWith( HttpJUnitRunner.class )
public class SampleServiceHttpTest {

  @Rule
  public Destination destination
    = new Destination( 'http://localhost:9092' );

  @Context
  private Response response;

  @HttpTest( method = Method.GET, path = '/services/message' )
  public void checkMessage() {
    String body = response.getBody( String.class );
    assertOk( response );
    assertEquals( MediaType.TEXT_PLAIN, response.getType() );
    assertEquals( 'HelloWorld', body );
  }
}

正在运行的服务

尽管所有这些工作都非常简单,但是它以某种方式使我感到困惑,即在我能够执行集成测试之前,首先要在本地运行集成测试才能启动服务器。 由于忙于手头的任务,我经常忘记启动服务器,遇到连接超时等问题。

但是我通过使用PDE JUnit启动配置找到了解决方案,因为可以在运行测试的过程中将这样的配置设置为启动服务器。

为此,创建并选择一个包含所有要运行1的集成测试的测试套件。

…之后切换到主标签并选择无头模式...

…最后但并非最不重要的一点是配置服务器使用的程序参数,在我们的案例中,该参数主要涉及端口定义。

“插件”选项卡中的捆绑软件选择包含与用于独立运行服务器的osgi启动配置相同的捆绑软件,以及JUnit,PDE JUnit,restfuse捆绑软件及其依赖项。 所选的测试套件可能如下所示:

@RunWith( Suite.class )
@SuiteClasses( {
  SampleServiceHttpTest.class
} )
public class AllRestApiIntegrationTestSuite {

  public static String BASE_URL
    = 'http://localhost:'
    + System.getProperty( 'org.osgi.service.http.port' );
}

唯一不寻常的是BASE_URL常量定义。 如上所述,测试运行的服务器端口在启动配置中指定为程序参数。 但是Restfuse测试需要在目标规则定义期间提供端口。 使用上述方法可以在不影响测试的情况下更改配置中的端口。 只需将常量用作定义中的参数,如下面的代码段2 3所示

@Rule
  public Destination destination
    = new Destination( BASE_URL );

这个简单的设置效果很好,并改善了我在本地运行集成测试的工作流程。 将启动配置保存在共享项目中后,您的团队成员就可以轻松地重用启动配置。

今天就这样,反馈一如既往地受到高度赞赏。 顺便说一句,霍尔格答应我写一篇文章,介绍如何将上述内容集成到基于Maven / tycho的版本4中 -请继续关注

  1. 当然,您也可以使用运行选定项目,程序包或源文件夹的所有测试的可能性,但是出于我们的目的,使用套件方法并运行单个测试用例是可以的
  2. 在现实世界中,您可能会为常量定义提供一个单独的类,以避免将测试耦合到套件。 为了简化起见,我在这里略过。
  3. 请注意,使用静态导入包含BASE_URL,以提高代码段的可读性
  4. Holger信守诺言,请参阅: http : //eclipsesource.com/blogs/2012/09/11/running-httprest-integration-tests-in-an-eclipse-tycho-build/


参考:来自JCG合作伙伴 Frank Appel的Code Affine博客在Eclipse中有效地运行HTTP / REST集成测试

翻译自: https://www.javacodegeeks.com/2012/11/running-httprest-integration-tests-efficiently-in-eclipse.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值