Liquibase написан на Java и использует Maven в качестве системы сборки.
Структура кода соответствует стандартной Maven-структуре каталогов, разделенной на модули, с liquibase-core
как центральным модулем.
Хотя все еще существуют старые тестовые классы, написанные с использованием JUnit, тесты должны быть написаны (или, если возможно, перенесены) в Spock.
ЗАМЕТКА: ЭТО ОПИСАНИЕ АЛЬФА-СИСТЕМЫ, КОТОРАЯ ВОЗМОЖНО БУДЕТ ИЗМЕНЕНА. ПРОВЕРЯЙТЕ ЕЁ ЧАСТНО
Поскольку Liquibase взаимодействует с множеством различных баз данных, важно автоматизировать тестирование этих взаимодействий.
Чтобы написать тест против внешней базы данных, вам сначала нужно иметь базу данных для тестирования. Liquibase автоматизирует этот процесс, чтобы вы могли сосредоточиться на написании тестов, а также для обеспечения стандартизации и повторяемости тестов.
testSystem = Scope.getCurrentScope().getSingleton(TestSystemFactory.class).getTestSystem("h2")
, где аргумент getTestSystem()
является ключом для настроенной системы.Основные тестовые системы настроены в liquibase.sdk.yaml.
Когда эта строка в вашем тесте выполняется, TestSystemFactory использует запущенную систему, если она доступна, или запускает новую систему, если это необходимо.
Любые новые запущенные системы будут доступны на протяжении всего времени выполнения всех тестов и будут закрыты в конце всего цикла.Базовый класс TestSystem
предназначен для работы не только с базами данных, поэтому, если вы знаете, что подключаетесь к базе данных, вы захотите привести его к типу DatabaseTestSystem
для вызова методов, таких как getConnection()
, для подключения к нему.
Например:
@Shared
private DatabaseTestSystem mysql =
(DatabaseTestSystem) Scope.getCurrentScope().getSingleton(TestSystemFactory.class).getTestSystem("mysql")
Когда TestSystems
нужно запустить, Liquibase обычно полагается на Docker-экземпляры. Когда Docker-образы недоступны или не нужны, они также могут подключаться к внешней базе данных через настройку url
. При использовании контейнеров Docker, если мы хотим добавить поддержку нового базового данных для тестирования, нам нужно создать новый тестовый класс, расширяющий DatabaseTestSystem
и переопределить метод createContainerWrapper()
, как показано ниже:
public class FirebirdTestSystem extends DatabaseTestSystem {
public FirebirdTestSystem(Definition definition) {
super(definition);
}
@Override
protected DatabaseWrapper createContainerWrapper() throws Exception {
return new DockerDatabaseWrapper(new FirebirdContainer(
DockerImageName.parse(getImageName()).withTag(getVersion()))
.withDatabaseName(getCatalog())
.withUsername(getUsername())
.withPassword(getPassword()),
this
);
}
}
Кроме того, нам нужно добавить тестовую зависимость для базы данных, для которой добавляется поддержка, в файл pom.xml
модуля liquibase-extension-testing:
<dependency>
<groupId>org.firebirdsql</groupId>
<artifactId>firebird-testcontainers-java</artifactId>
<version>1.2.0</version>
</dependency>
```#### Управление системами для тестирования
Тестовый фреймворк спроектирован для автоматического запуска экземпляров баз данных любого типа. Однако, тесты баз данных могут быть медленными, поэтому Liquibase по умолчанию использует виртуальные базы данных (h2, hsqldb, sqlite). Любые тесты, требующие других платформ баз данных, будут автоматически помечены как "игнорируемые".
Атрибут `liquibase.sdk.testSystem.test` должен быть запятой-разделенным списком, указанным в файле `liquibase.sdk.local.yml` (см. ниже).
Настройка `liquibase.sdk.testSystem.test` также может указывать конкретные настройки для тестовых систем, которые вы хотите использовать для тестирования.
Например, если у вас есть `liquibase.sdk.testSystem.test=h2?version=1.4.200,mysql`, когда ваши тесты вызывают `getTestSystem("h2")`, они получат систему h2 версии 1.4.200. Вы также можете указывать профили (см. ниже), как `liquibase.sdk.testSystem.test=mssql:case-sensitive,mysql`.#### Запуск тестовых систем независимо от тестов
Часто вам нужно иметь базу данных, которую можно запускать вручную с помощью Liquibase вне автоматизированных тестов.
Файлы `liquibase-extension-testing.jar` и соответствующий `liquibase-extension-testing-deps.jar` добавляют группу команд `liquibase sdk system` в CLI Liquibase, что позволяет вам запускать и останавливать те же контейнеры, которые используются в ваших тестах.
Добавив эти JAR-файлы в директорию `LIQUIBASE_HOME/lib`, вы можете запустить `liquibase sdk system up --name mysql`, чтобы запустить систему MySQL, где аргумент `name` — это имя тестовой системы, которую вы хотите запустить.
Для остановки экземпляров, запущенных таким образом, выполните команду `liquibase sdk system down --name mysql`.#### Локальная конфигурация
Файл `liquibase.sdk.yaml` содержит базовую конфигурацию, но бывают случаи, когда вы захотите изменить поведение по умолчанию.
Создавая файл `liquibase.sdk.local.yml` в той же директории, что и файл `liquibase.sdk.yaml` (например, в директории `liquibase-extension-testing/src/main/resources`), вы можете добавить только те параметры, которые хотите переопределить.
ЗАМЕЧАНИЕ: Файл `liquibase.sdk.local.yml` является специфическим для вашего окружения разработки, и конфигурация `.gitignore` настроена таким образом, чтобы исключить этот файл из коммитов.
В примере ниже приведена базовая конфигурация, которая будет использоваться для различных профилей, если они не переопределяют какие-либо свойства:
```yaml
liquibase:
sdk:
testSystem:
default:
username: lbuser
password: LiquibasePass1
catalog: lbcat
altCatalog: lbcat2
altSchema: lbschem2
altTablespace: liquibase2
keepRunning: true
test: mysql,h2,mssql
acceptLicenses: mssql
будет запускать тесты против mysql
, h2
и mssql
. Также указывается, что вы принимаете лицензионное соглашение EULA, требуемое контейнером Docker для mssql
.
В стандартном файле liquibase.sdk.yaml
и файле liquibase.sdk.local.yaml
можно определить "профили", которые переопределяют конкретные параметры базовой конфигурации.
Например, конфигурация для h2
определяет профили "1.x" и "2.x":
h2:
url: jdbc:h2:mem:${catalog};DB_CLOSE_DELAY=-1
profiles:
"1.x":
version: 1.4.200
"2.x":
version: 2.0.206
```Преимущество профилей заключается в возможности пользователей указывать точную версию h2, которая является релевантной для их тестирования.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )