2012-11-09 15 views
6

Chciałbym móc uruchamiać testy integracji dla klienta/serwera Java (za pomocą wbudowanego pomostu). Ponadto chciałbym móc mieszać i dopasowywać różne wersje kodu źródłowego serwera i klienta podczas testowania integracji.Najlepsza strategia Git do testowania różnych wersji klienta i serwera.

Zastanawiam się, jaki jest najlepszy git lub Maven strategia wersja do wykonania tego:

  1. Używając tego samego repozytorium git dla klienta i serwera, byłoby trudne do kodu zamawiania różnych wersjach serwerowych i przetestuj go pod kodem różnych wersji klienckich.

  2. Korzystanie z oddzielnych repozytoriów git (1st repozytorium z src klient i integracyjnych testów, 2nd repozytorium z serwera SRC) - Wymagałoby to również do kasy zarówno repozytoria do uruchamiania testów integracyjnych i zakładamy ścieżek względnych między nimi.

  3. Testowanie kodu src klienta tylko na serwerze WAR w wersji WAR może spowodować uczciwe błędy deweloperów przeprowadzających testy na serwerze WAR, które nie są zgodne z wyewidencjonowanym kodem źródłowym serwera.

+0

Znasz polecenie git bisect? – khmarbaise

+0

Jak używać polecenia git bisect do uruchamiania określonej wersji serwera i konkretnej wersji klienta? – itaifrenkel

Odpowiedz

1

Proponuję, aby proces był prosty, ponieważ masz już dość zmiennych, które już nie występują, bez wprowadzania potencjalnych problemów z zarządzaniem git. W tym celu uniknęłbym submodułów. Zamiast tego dałbym programistom jasne powiązania gałęzi/tagów w celu przetestowania repozytorium klienta i serwera w macierzy testowej.

Użyj znaczników, aby łatwiej było ponownie użyć i powtórzyć te same testy w macierzy w przyszłości, szczególnie po usunięciu błędów z pierwszej rundy.

Krótko mówiąc, polecam Twoje rozwiązanie # 2. Założenie ścieżki względnej jest lepsze niż potencjalne zamieszanie wprowadzone przez submoduły.

4

Wskażę trzecie wyzwanie: testy integracyjne mogą zawierać błędy, więc możesz chcieć niezależnie kontrolować wersję testową.

Użyłem funkcji podmodułów git do koordynowania wielu repozytoriów. Utwórz nowe repozytorium, które będzie zawierać odwołania do repozytorium klienta i repozytorium serwera. Możesz również umieścić podstawowy sterownik testowy w tym repo nadrzędnym.

Gdy nowy programista dołącza do zespołu, może sklonować to repo rodzica, a następnie uruchomić git submodule update --init, aby sklonować moduły klienta i serwera. W ten sposób wszystkie względne ścieżki zostaną ustawione w taki sam sposób jak wszyscy inni.

Jednak nie lubię pozwalać, powiedzmy, repozytorium klienta, zakładając, że serwer ma numer ../server/. Więc sposób, w jaki to zrobiłem, pozwala repozytorowi macierzystemu przekazać potrzebne ścieżki do modułu. Na przykład można mieć test.sh w repo dominującej, która biegnie

make -C client SERVER_PATH=$(pwd)/server test 

W twoim przypadku, można również umieścić cały kod testowy w repo macierzystej. Wtedy może bezpiecznie założyć względne ścieżki do submodułów.

Interesująca korzyść uboczna tego układu: Można utworzyć polecenia git, które rejestrują określone kombinacje wersji, ponieważ wersja, która została wyewidencjonowana w module częściowym, jest rejestrowana po zatwierdzeniu w repozytorium głównym. Możesz go użyć do utworzenia gałęzi lub zbioru tagów dla kombinacji wersji, które pomyślnie przeszły testy.

+0

W jaki sposób god submoduły są uczciwe z nowymi git? Obawiam się, że programista miałby zbyt dużą złożoność. Czy jest to jednorazowa konfiguracja dla 90% programistów (którzy chcą założyć, że każdy subrepo jest osobnym repozytorium), czy powinni być świadomi submodułów? – itaifrenkel

+2

Zrobiłem to z zespołem czterech innych programistów, a od tamtej pory wiele innych osób już tu nie było. W większości była to jednorazowa konfiguracja: po uruchomieniu 'git submodule update --init' nie musieli już o tym myśleć. Twórcy, którzy musieli pracować z systemem kompilacji, który zbudowałem na górze, mieli więcej problemów, ale nie musicie posuwać się tak daleko. :-) (Odbyłem rozmowę od czasu "Dlaczego nie powinieneś pozwolić mi zaprojektować twojego systemu budowy", ale odbiorcy i tak skopiowali mój projekt ...) –

+0

Jak udało ci się przezwyciężyć problem, że moduł jest śledzony przez commit raczej niż według nazwy oddziału? Jaki był przebieg uruchamiania polecenia "git submodule update"? – itaifrenkel

Powiązane problemy