前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DataBaseRider实现跨多个数据库的操作

DataBaseRider实现跨多个数据库的操作

作者头像
Antony
发布2020-12-02 10:20:17
1.3K0
发布2020-12-02 10:20:17
举报
文章被收录于专栏:软件测试那些事

本文介绍如何在SpringBoot项目中,使用Junit5 + DataBaseRider实现跨多个数据库的操作。

应用场景

在涉及微服务的测试中,当测试某个微服务时,通常都会发生服务间调用。也就是测试微服务A时,A可能会向微服务B请求某些数据来完成某些业务处理。如下图所示,

而很有可能,这些数据是源自B服务的数据库。

在测试时,为了保证自动化用例可以反复被执行,就需要控制被测系统的上下文。也就是说,为了能够让针对A服务的测试能够通过,我们需要保证B系统的正常运转,尤其是要对B系统的数据库进行控制,如确保B数据库的某个表中的数据是某些固定的记录,也就是在用例执行之前测试框架通过setup步骤临时导入到该表中。 如何用DataBaseRider实现上述操作呢?

测试用application-test.properties

一般来讲,在SpringBoot项目的配置文件,如application.properties中已经默认有一个数据库的配置了,一般是spring.datasource下的配置项。 为了能够控制第二个数据库,需要在默认数据库的基础上,额外增加一个需要连接的B服务的数据库的配置。因为这些配置只在集成测试或者系统测试中需要,可以考虑额外采用一个application-test.properties文件来存放这些信息,而不是污染项目组原有的配置文件。 一个可能的样例如下:

代码语言:javascript
复制
spring.datasource.url=jdbc:mysql://45.93.1.5:3306/fire?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.bbb.driver-class-name=oracle.jdbc.OracleDriver`
spring.datasource.bbb.url=jdbc:oracle:thin:@localhost:1521:bbb
spring.datasource.bbb.username=bbb
spring.datasource.bbb.password=bbb

额外写一个DataSourceConfig 的Bean

代码语言:javascript
复制
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
    @Bean(name = "bbb")
    @ConfigurationProperties(prefix = "spring.datasource.bbb")
    public DataSource dataSourceSentence() {
        return DataSourceBuilder.create().build();
    }
}

**案例代码源自网络

@DBRider指定数据源

将DBRider自带的案例稍微修改下

代码语言:javascript
复制
package com.github.database.rider.springboot;
@DBRider //default datasource is used
@SpringBootTest
public class MultipleDataSourcesTest {
    @Autowired
    UserService userService;

    @Test
    @DataSet("users.yml")
    public void shouldListUsers() {
        //http call here
 assertThat(userService.findByEmail("dbrider@mail.com")).isEqualTo(new User(3));
    }

    @Test
    @DBRider(dataSourceBeanName = "companyDataSource")
    @DataSet(value = "companies.yml",cleanBefore = true)
    @ExpectedDataSet("expectedCompany.yml")
    public void shouldDeleteCompany() {
        userService.deleteComany(1L);
    }
}

通过@DBRider(dataSourceBeanName = "companyDataSource") 来指定所使用的dataSource,并通过它来实现对数据库的操作。

由于@DBRider注解既可以在类上,也可以用在方法上,使用中注意使用范围。如果未申明所使用的dataSource的话,将默认使用带有@Primary注解的dataSourceBean。

这样就可以实现对多个数据库的操作了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 测试用application-test.properties
  • 额外写一个DataSourceConfig 的Bean
  • @DBRider指定数据源
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档