Избегайте перезапуска сервера каждый раз, когда небольшие изменения в интеграционных тестах - PullRequest
1 голос
/ 12 июня 2019

Избегайте перезапуска сервера каждый раз, когда крошечные изменения в интеграционных тестах

Я новичок в Spring и испытываю большие трудности при написании интеграционных тестов в Spring.

Например, скажемЯ запускаю интеграционный тест и меняю приведенный ниже код.

Видите, ничего не связано с изменением кода сервера.

Чтобы запустить новый обновленный интеграционный тестовый код, мне нужно запуститьвеб-сервер и повторное заполнение данных, которое может занять 5 минут.

Трудно представить, как люди управляют этим способом для разработки.

Я не уверен, возможно ли запустить веб-сервер вместе сbootRun и интеграционный тест должен пытаться связаться с выделенным сервером, не удосуживаясь перезагрузить серверы для выполнения тестов.

Обычно, какой файл конфигурации части будет определять это поведение?

Я взял на себяэтот проект и придётся выяснить самому.

до

    serverResp.then()
            .statusCode(203)
            .body("query.startDateTime", equalTo("2018-07-01T00:00:00"))

после

    serverResp.then()
            .statusCode(200)
            .body("query.endDateTime", equalTo("2020-07-01T00:00:00"))

1 Ответ

1 голос
/ 25 июня 2019

Есть много разных способов сделать интеграционное тестирование. Spring имеет встроенную инфраструктуру, которая выполняет интеграционный тест в той же JVM, что и реальный сервер. Если приложение тяжелое (как правило, относится к монолитам), для его запуска может потребоваться некоторое время, поэтому лучшее, что вы можете сделать, это «выбрать» какие части приложения для загрузки, которые имеют отношение к тесту. Весной есть способы добиться этого, вопрос в том, позволяет ли код вашего приложения такое разделение.

Тогда есть способ написать интеграционные тесты, чтобы они действительно связывались с удаленным сервером, который работает «заранее». во время сборки это можно сделать один раз перед фазой тестирования, а затем, когда тесты завершены, сервер должен быть выключен.

Обычно в таких тестах есть несколько способов указать хост / порт сервера для связи (я отложил в сторону безопасность, учетные данные и т. Д.). Таким образом, вы можете проверить, есть ли какое-то специальное свойство flag / system - прочитайте хост / порт оттуда.

В этом подходе хорошо то, что вам не нужно перезагружать сервер перед каждым тестом. Плохо то, что он не всегда позволяет легко тестировать: если ваш тест развертывает некоторые тестовые данные, этот тест также должен удалить данные в конце теста. Тесты должны быть тщательно спланированы.

Третий подход является своего рода гибридом и, как правило, не является основной ИМО: Вы можете создать специальную настройку, которая будет запускать тест в другой JVM (внешне), но как только тест начнется, его байт-код будет загружен на работающий сервер (для этого на сервере должен быть бэкдор), и фактический байт-код будет фактически выполнен на сервере. Снова сервер работает и работает.

Я однажды написал библиотеку, чтобы сделать это со Споком, но это было давно, и мы не использовали ее в конце концов (этот проект был закрыт).

Не хочу саморекламы или еще чего-нибудь, но вы можете проверить это и, возможно, позаимствовать технические идеи о том, как это сделать.

...