2016-01-18 21 views
5

Obecnie w naszym projekcie używamy Spring Integration do integracji wielu punktów końcowych związanych z usługami i niektórymi protokołami.Test końcowy w wielu aplikacjach Spring Boot

Projekt to wiele aplikacji Spring Boot, w produkcji zostanie wdrożonych więcej niż jeden plik wykonywalny.

Pytanie brzmi:

  1. Jak uruchomić kres zakończyć test, który musi uruchomić przejechać niektóre z tych aplikacji, trzeba uruchomić jeden po drugim ręcznie? Przed uruchomieniem aplikacji bez uruchamiania Spring-Boot mogę użyć pluginów tomcat7 Maven, aby ukończyć tę pracę (wdrożyć wojny w osadzony tomcat i uruchomić go w fazie fazy przed-integracji-testów), teraz jak uruchomić wszystkie powiązane aplikacje przed Przeprowadzam mój test. Załóżmy, że nie używam teraz Docker/Vagrant.

    Podobne pytanie znaleźć na stackoverflow, End to end integration test for multiple spring boot applications under Maven

    Jak uruchomić test end2end automatycznie?

  2. W teście Wiosna Integracji kiedyś muszę kpić punkt końcowy HTTP, więc napisałem prosty Controller w pakiecie testowym zarchiwizować ten cel, ale chcę, aby uruchomić go na innym porcie, które sprawiają, że bardziej jak zasób zewnętrzny. Jak uruchomić różne klasy @SpringBootApplicaiton na różnych portach jednocześnie w teście do tego celu?

Używam najnowszego oprogramowania Maven, Java 8, Spring Boot 1.3.1.RELEASE.

Dzięki.

+0

Na drugie pytanie, znalazłem Spring zapewnia 'MockRestServiceServer', który może kpić z docelowego zdalnego REST API do archiwizacji tego celu w testach. – Hantsy

Odpowiedz

0

W rzeczywistości Spring Boot jest dostarczany z obsługą kontenera serwletu embedded. Jednym z nich jest dokładnie Tomcat. Domyślne ustawienie dla org.springframework.boot:spring-boot-starter-web.

Wraz zii jego @SpringApplicationConfiguration i @WebIntegrationTest możesz osiągnąć swoje wymagania, nawet z losowym port.

Proszę odnieść się do wiosennej Boot Reference Manual aby uzyskać więcej informacji:

zmienić port można dodać właściwości środowiskowych do @WebIntegrationTest jak rozdzielona dwukropkami lub równa-rozdzielone pary nazwa-wartość, na przykład @WebIntegrationTest ("server.port: 9000"). Dodatkowo można ustawić właściwości server.port i management.port na 0, aby uruchomić testy integracji przy użyciu losowych portów.

Dzięki temu twój @SpringBootApplicaiton zostanie wdrożony do tego osadzonego Tomcat, a twój test może uzyskać dostęp do uruchomionych usług/kontrolerów.

Uwaga: nie ma znaczenia, czy aplikacja Spring Boot ma funkcje Spring Integration. Zachowanie jest takie samo: osadzony kontener serwletu i testy integracji z @Value("${local.server.port}").

+2

Dobrze wiem o '@ IntegrationTest' i' @ WebIntegrationTest' w aplikacjach Spring Boot. Może moja mina cię zdezorientowała, nie jestem Anglikiem.Potrzebne jest uruchomienie mojego samodzielnego testu end2end przed uruchomieniem kilku aplikacji Spring Boot (sprawa 1 w moim pytaniu). – Hantsy