我有一个 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的数据库。
同时我找到了解决方案。我不知道这是否是一种解决方法,但我想与您分享。
使用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();
希望这有帮助!