在 Keycloak 测试容器中的测试之间清理数据库

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

我有一个 Spring Boot 应用程序,我使用测试容器进行测试。

我想在测试之间清理我的数据库。我在 Keycloak 测试容器中创建一个用户,以使用其 ID 进行进一步的测试,但该用户几乎在每次测试中都会发生变化,我想在每次测试后删除该用户并清理 Keycloak 的数据库。

我是这样创建Keycloak测试容器的:

@Container
static KeycloakContainer keycloakContainer = new KeycloakContainer()
            .withRealmImportFile("test-realm-export.json")
            .withAdminUsername("admin1")
            .withAdminPassword("admin1");

我可以使用以下配置清理

@AfterEach
部分中的 MariaDB 测试容器。

@AfterEach
public void cleanUpEach() throws Exception {
   try (Connection connection = dataSource.getConnection()) {
     Resource resource = new ClassPathResource("/clean_up.sql");
     ScriptUtils.executeSqlScript(connection, resource);
   }
}

clean_up.sql
包含以下行:

TRUNCATE TABLE table1;
TRUNCATE TABLE table2;

但问题是我也不知道如何清理Keycloak的数据库。

java database spring-boot keycloak testcontainers
1个回答
0
投票

同时我找到了解决方案。我不知道这是否是一种解决方法,但我想与您分享。

使用keycloak实例,我可以删除我在每次测试中修改的用户。

    private Keycloak getKeycloakInstance() {
        return KeycloakBuilder.builder()
                .serverUrl(keycloakContainer.getAuthServerUrl())
                .realm("master")
                .clientId("admin-cli")
                .username(keycloakContainer.getAdminUsername())
                .password(keycloakContainer.getAdminPassword())
                .build();
    }

我在

@AfterEach
中输入了以下代码:

getKeycloakInstance().realm("test-realm").users().get(USER_ID).remove();

希望这有帮助!

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