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

来源:互联网 发布:方正字库mac版 编辑:程序博客网 时间:2024/06/06 07:34

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发消息的实现代码

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

Rabbitmq收消息代码

@Componentpublic 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镜像。然后使用代码进行配置

  @Configurationpublic 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
原创粉丝点击