使用Overcast搭建spring boot应用集成测试环境

Overcast简介

Overcast是一个提供java api管理虚拟机容器的开源项目,可用于集成测试中虚拟机环境搭建,可以支持以下对这些虚拟机进行启停控制:
* Amazon EC2 hosts (Automatic host creation/destroy)
* Vagrant hosts (Set up to the running state, tear down to the initial state)
* VirtualBox hosts (Load snapshot and start, power off)
* Libvirt managed KVM hosts (Fast clones using backing store, provisioning)
* Docker containers
* Tunneled cloud hosts (Reaching target host via ssh tunnel)

使用方式比较简单,maven依赖

<dependency>
    <groupId>com.xebialabs.cloud</groupId>
    <artifactId>overcast</artifactId>
    <version>2.5.1</version>
</dependency>

一个配置了虚拟机信息的overcast.conf文件

rabbitmq {
    dockerImage="rabbitmq:3.6.6"
    exposeAllPorts=true
    remove=true
    removeVolume=true
}

加上了上面这个配置文件后,就可以通过下面的api进行虚拟机的启停管理

 CloudHost rabbitmq = CloudHostFactory.getCloudHost("rabbitmq");
 rabbitmq.setup();
 rabbitmq.teardown();

Spring boot应用使用docker搭建测试环境示例

下面列举一个实现rabbitmq收发消息的spring boot应用,使用Overcast搭建测试环境的例子。
由于用到了Rabbitmq,如果要测试收发功能,必须要有Rabbitmq服务器才能测试,使用Overcast在测试时启动提供了Rabbitmq服务的docker容器,自动化搭建环境,非常方便。以下是实现

Rabbitmq发消息的实现代码

  @Component
public class AppQueueMessageSender {
    @Autowired private RabbitTemplate rabbitTemplate;
    public void send(final String message) {
        rabbitTemplate.convertAndSend("app.exchange", "app.queue", message);
    }
}

Rabbitmq收消息代码

@Component
public class AppQueueMessageListener {
    @Autowired private AppMessageRepository repository;
    @RabbitListener(
        queues = "app.queue",
        containerFactory = "rabbitListenerContainerFactory",
        admin = "amqpAdmin"
    )
    public void onMessage(final String message) {
        repository.persist(message);
    }
}

在 src/test/resources目录下放一个overcast.conf文件,内容为:

  rabbitmq {
    dockerImage="rabbitmq:3.6.6"
    exposeAllPorts=true
    remove=true
    removeVolume=true
}

写明了使用rabbitmq的docker镜像。然后使用代码进行配置

  @Configuration
public class OvercastConfiguration {
     // 通过CloudHostFactory获取rabbitmq虚拟机的管理类CloudHost,把它设置为bean,bean初始化时启动,销毁时停止
    @Autowired private ConfigurableEnvironment env;
    @Bean(initMethod = "setup", destroyMethod = "teardown")
    @Qualifier("rabbitmq")
    public CloudHost rabbitmq() {
        return CloudHostFactory.getCloudHost("rabbitmq");
    }
    // 把rabbitmq虚拟机的端口,hostName等信息设置到spring boot的rabbitmq属性中,spring boot应用中的rabbitmq收发消息将连接这个docker虚拟机容器中的rabbitmq服务
    @PostConstruct
    public void init() throws TimeoutException {
        final CloudHost rabbitmq = rabbitmq();
        final Map<String, Object> properties = new HashMap<>();
        properties.put("spring.rabbitmq.host", rabbitmq.getHostName());
        properties.put("spring.rabbitmq.port", rabbitmq.getPort(5672));
        final PropertySource<?> source = new MapPropertySource("overcast", properties);
        env.getPropertySources().addFirst(source);
    }
}

最后在spring boot的测试类中加载这个配置类即可

 @SpringBootTest(
    classes = { OvercastConfiguration.class, AppConfiguration.class }, 
    webEnvironment = WebEnvironment.NONE
)

执行spring boot测试将会搭建起rabbitmq的docker服务器,并连接到这里进行rabbitmq收发消息的测试。

参考文章 https://dzone.com/articles/testing-apps-with-overcast-and-docker

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值