• 1000 выполняется:
- Мы создаем
static
экземпляр класса, который управляет жизненным циклом testcontainers для моих тестов с огурцом. - Это в настоящее время включает три контейнера: (i) Postgres DB (с примененной нашей схемой), (ii) Axon Server (хранилище событий), (iii) отдельный контейнер приложения.
- Мы используем новый Spring
@DynamicPropertySource
, чтобы установить значения нашего источника данных, хранилища событий и т. Д. c. чтобы процесс огурца мог подключаться к контейнерам.
@Before
в каждом сценарии мы выполняем некоторую очистку тестовых контейнеров. - Это сделано для того, чтобы у каждого сценария был чистый лист.
- Он включает в себя усечение данных в таблицах (postgres контейнер), сброс всех событий в нашем хранилище событий (контейнер Axon Server) и некоторые другие работы для нашего приложения (сброс соответствующих обработчиков событий отслеживания) и т. д. c.
Хотя тесты проходят нормально, проблема в том, что по умолчанию это занимает слишком много времени для запуска набора тестов. Поэтому я ищу способ увеличить параллелизм, чтобы ускорить его.
- Добавление аргументов
--threads <n>
не будет работать, потому что контейнеры static
будут конкурировать (и я пробовал это и как и ожидалось, он терпит неудачу).
Как я вижу, существуют разные варианты параллелизма, которые будут работать:
- Каждый сценарий запускает свой собственный контекст приложения Spring (по сути разветвление JVM), развертывает собственные контейнеры и запускает тесты таким образом. это было бы обычно).
Я думаю, что в идеальном мире мы бы go за 1 (см. *). Но для этого потребуется машина с большим количеством памяти и процессоров (к которым у меня нет доступа). И поэтому вариант 2, вероятно, будет для меня наиболее разумным.
Мои вопросы:
- можно ли настроить огурец для разветвления JVM, которые запускаются назначенным файлы функций (которые соответствуют варианту 2 выше?)
- как лучше всего распараллелить эту ситуацию (с тестовыми контейнерами)?
* Независимое развертывание и тестирование каждого сценария согласуется с документами по огурцу, в которых говорится: «Каждый сценарий должен быть независимым; вы должны иметь возможность запускать их в любом порядке или параллельно, при этом один сценарий не мешает другому. Каждый сценарий должен проверять ровно одну вещь, чтобы в случае сбоя он не прошел по понятной причине. Это означает, что вы не будете повторно использовать один сценарий в другом сценарии. "