Запускать тестовые сценарии Spring одновременно не последовательно - PullRequest
0 голосов
/ 24 апреля 2019

Приложение My Spring Boot также запускает службу gRPC вместе со своей службой REST (HTTP). Я написал специальные тесты для gRPC и REST. Когда я запускаю gradle test , эти тесты запускаются последовательно; нет причин, по которым они не могут работать параллельно.

Здесь я снимаю один экземпляр моего приложения Spring Boot, работающего в то время, когда тесты выполняются параллельно.

Я попытался установить секцию test в моем файле Gradle, чтобы он имел 'forkCount', я также попытался установить параметры, такие, что параллельный = "классы", но это выдает ошибку о "параллельном 'будучи неизвестной собственностью (может быть, вещь с джунит 5?)

test {
    options {
        parallel = "classes"
//      forkCount = 2
    }
}

Параметр forkCount - это не то, что мне нужно, поскольку он запускает несколько экземпляров приложения Spring.

Я также попытался удалить @ RunWith из тестовых классов и создать отдельный тестовый класс (с аннотацией @ RuWith ), в котором есть следующий метод

    @Test
    void testRunner() {
        JUnitCore.runClasses(ParallelComputer.classes(), {GrpcTests.class, RestTests.class});
    }

Но похоже, что тесты все еще выполняются последовательно.

Я пробовал и другие вещи, извините, у меня не все под рукой.

Цель

В идеале то, на что я надеюсь, это один экземпляр моего приложения Spring Boot, работающего в то время, когда тестовые классы работают параллельно ( бонус, если я тоже смогу заставить методы работать параллельно )

  • Java-версия: "1.8.0_171"
  • Spring Boot Версия: 2.0.4.RELEASE
    В соответствии с рекомендацией я попытался добавить
    @Test
    public void contextLoads() throws Exception {
    }

И добавляя запись ' maxParallelForks ' в файл gradle, я уже использовал аннотацию @ SpringBootTest , но она действовала так же, как и при использовании forkCount `в том, что по крайней мере 2 экземпляра, с которых начался запуск, как видно из журнала выключения теста

2019-04-25 10:24:17.245 LogLevel=INFO   53838 --- shutting down gRPC server since JVM is shutting down
...
2019-04-25 10:24:30.125 LogLevel=INFO   53839 --- shutting down gRPC server since JVM is shutting down

Вы видите, что я получаю два сообщения о завершении работы и отображаются PID (53838 и 53839).

1 Ответ

0 голосов
/ 25 апреля 2019

Вам нужно объединить @SpringBootTest с maxParallelForks.

Аннотируйте свои юнит-тесты с помощью @SpringBootTest. @SpringBootTest загрузит контекст Spring Boot, который будет кэшироваться во всех ваших тестах.

"Приятной особенностью поддержки Spring Test является то, что контекст приложения кэшируется между тестами, поэтому, если у вас есть несколько методов в тестовом примере или несколько тестовых наборов с одинаковой конфигурацией, они несут только стоимость запуска приложение один раз "

См: https://spring.io/guides/gs/testing-web/

Добавьте следующее в свой build.gradle. Чтобы запустить несколько тестов одновременно.

tasks.withType(Test) {
    maxParallelForks = 4 //your choice here
}

См. https://guides.gradle.org/performance/#parallel_test_execution

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...