将 JUnit 配置为在 5 个线程上运行,每个线程使用不同的数据源

问题描述 投票:0回答:1

TL;DR 如何配置我的 JUnit 测试套件在 5 个线程上运行,每个线程使用不同的数据源?

我正在尝试加快 SpringBoot/JUnit 5 集成测试的速度,该测试目前需要 40 多分钟。我们正在考虑将它们并行化以节省时间。问题是某些测试会影响数据库,如果同时运行,这可能会扰乱其他测试。

我们的计划是使用 5 个 MySQL 容器并在 5 个线程上运行测试,每个线程连接到不同的容器。这样,测试就不会互相干扰。

您可以帮助我将 JUnit 测试套件配置为在 5 个线程上运行,每个线程使用不同的数据源吗?

spring-boot junit5 parallel-testing
1个回答
0
投票

您可以按照“JUnit 的并行测试执行

通过在 junit-platform.properties

 目录中添加/完成 
src/test/resources
 文件
,在 JUnit 中启用并行执行:

junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
junit.jupiter.execution.parallel.config.strategy = fixed
junit.jupiter.execution.parallel.config.fixed.parallelism = 5

(Junit 本身使用类似的测试

然后配置 Spring Boot 为每个测试创建不同的

DataSource
对象。使用 Spring 配置文件 或根据当前线程动态选择数据源。

使用 Spring 配置文件,为

application.properties
application.yml
中的每个配置文件定义数据源属性:

spring:
  profiles: datasource1
  datasource:
    url: jdbc:mysql://localhost:3306/db1
    username: user
    password: pass

--- # Repeat for each datasource configuration

(您可能需要使用环境变量 -

password: ${DB_PASSWORD}
- 或其他外部化配置来存储密码等敏感信息。至少使用具有有限权限的测试帐户。)

配置一个

DataSource
bean,根据活动配置文件选择适当的配置:

@Configuration
public class DataSourceConfig {

    @Bean
    @Profile("datasource1")
    public DataSource dataSource1() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/db1")
                .username("user")
                .password("pass")
                .build();
    }

    // Repeat for other datasources
}

使用相应的

@ActiveProfiles
注释注释每个测试类或方法,以指定应使用哪个数据源:

@SpringBootTest
@ActiveProfiles("datasource1")
public class MyTest {
    // Test methods
}

通过 IDE 或使用 Maven 或 Gradle 等构建工具运行测试。每个用特定配置文件注释的测试都将使用相应的数据源。

© www.soinside.com 2019 - 2024. All rights reserved.