Czy test integracji powinien być uwzględniony w ciągłej integracji (CI)?

11

Załóżmy, że tworzymy aplikację internetową, a Hudson wykonuje typowe zadania, takie jak kompilacja, test jednostkowy i analiza kodu statycznego.

Ale trudna część jest taka: Hudson wdraża i uruchamia serwer aplikacji, aby wykonać testy integracyjne po wykonaniu poprzednich zadań.

Oznacza to pewne trudne rzeczy, takie jak połączenie z bazą danych, połączenie aplikacji trzeciej części, nasłuchiwanie portu gniazda, zmienne środowiskowe, przekazywanie błędów podczas uruchamiania serwera itp. Musimy skonfigurować i zburzyć te rzeczy za każdym razem, jest to trudne. Co gorsza, testy integracyjne mogą łatwo przerwać test integracyjny.

Czy sądzisz, czy test integracji powinien zostać włączony do ciągłej integracji (CI)? Czy można to zrobić ręcznie? Lub uprościć test integracji?

远 声 远 Shengyuan Lu
źródło
2
Twój problem dotyczy jakości testów, a nie części CI. W testach integracyjnych nadal dobrą praktyką jest kpienie z zależności.
Luc Franken,

Odpowiedzi:

8

nazwa Continuous Integration wiele mówi. Czy jest lepsze miejsce do przeprowadzania testów integracyjnych niż tam, gdzie już integrujesz?
Oczywiście nie powinno to być jedyne miejsce, w którym przeprowadzane są te testy, podczas opracowywania należy starać się, aby mimo wszystko nie zepsuć, a nie tylko, że zmiany działają w oderwaniu.
Ostatecznie obowiązkiem każdego członka zespołu jest to, by rzeczy się nie zepsuły, próba obwiniania i sztywnego definiowania ludzi lub etapy, do których ograniczenia są ograniczone, są nieproduktywne.

jwenting
źródło
4
Ale Continuous też tam jest. Jeśli testy integracyjne zajmują minuty lub godziny, nie są ciągłe.
U2EF1 10.09.13
@ U2EF1 następnie skonfiguruj dyskretny serwer integracyjny.
Kayaman
1
@Kayaman twój komentarz jest jedynym wynikiem w Internecie dla „dyskretnego serwera integracyjnego”. Czy możesz wyjaśnić, co masz na myśli?
Stijn,
3

Czy sądzisz, czy test integracji powinien zostać włączony do ciągłej integracji (CI)?

Jeśli masz testy integracyjne, które przechodzą i nie wymagają od nikogo stania i naciskania przycisków, to tak - dodaj je do systemu CI.

Ponieważ jednak testy integracyjne mogą trwać bardzo długo, należy ograniczyć częstotliwość ich uruchamiania. Można je wykonać w nocy, gdy serwer CI jest bezczynny.

BЈовић
źródło
3

Najpierw odpowiedz na twoje pytanie: Tak, są zdecydowanie częścią Ciągłej integracji, jeśli mnie pytasz. Myślę jednak, że musimy wyjaśnić, jakie są testy integracyjne.

Martin Fowler mówił o ciągłym dostarczaniu jako sposobie zautomatyzowania całego procesu kompilacji w celu szybkiego wdrożenia. Wymaga to od programistów szybkiego uzyskania informacji zwrotnej w ramach procesu ciągłej integracji. Określa więc etapy, przez które kompilacja powinna przejść :

  1. kompilacja zatwierdzeń
  2. dokładne testy
  3. rozlokowanie

Kompilacja zatwierdzeń nie powinna trwać dłużej niż 10 minut, jak twierdzi, ze względu na szybką informację zwrotną dla programistów.

Oto, jak widzę rzeczy: w pierwszym kroku pobierz najnowszy zatwierdzenie i go skompiluj. Jeśli to się powiedzie, uruchom testy jednostkowe, aby dowiedzieć się, czy twoje klasy / grupy klas działają zgodnie z oczekiwaniami.

Gdy to się powiedzie, przejdziesz do części testu integracji. Tutaj testujesz interakcję właśnie pomyślnie przetestowanych urządzeń. Polega to na zasilaniu urządzeń wejściowymi i obserwowaniu ich stanu / interakcji / wyjścia. Pamiętaj, że wciąż jesteśmy w kompilacji zatwierdzeń, więc chcemy, aby to również było szybkie. Dlatego interakcje z systemem plików, bazą danych, sieciami równorzędnymi itp. Muszą zostać zablokowane w celu szybkiego wykonania. Martin Fowler sugeruje również użycie baz danych w pamięci, jeśli są one potrzebne, tylko po to, aby szybko wykonać działanie na serwerze CI.

Po upewnieniu się, że jednostki działają i współdziałają zgodnie z wymaganiami, zwykle chcesz dowiedzieć się o zasięgu testu (samo testowanie małego podsystemu zwykle po prostu nie wystarcza) i udostępnić testowane artefakty do testowania funkcjonalnego / kontroli jakości / wdrożenia ( przeczytaj: dokładne testy), jeśli uważasz, że testy obejmują wystarczająco dużo twojego programu. Właśnie wtedy zapewniasz środowisko testowe, które odzwierciedla środowisko produkcyjne, na które celujesz, i uruchamiasz testy obejmujące prawdziwą bazę danych, rzeczywiste pliki, prawdziwe sieci równorzędne itp.

Na koniec testy integracyjne dotyczą zmian kodu. Chcesz się upewnić, że wprowadzone zmiany nie psują bieżącego systemu, co oznacza, że ​​dobrze się integrują. Aby dowiedzieć się, czy są, musisz upewnić się, że zachowują się one same w sobie, a następnie, czy prawidłowo współdziałają ze swoimi zależnościami i czy w ogóle zostały przetestowane. Po przejściu wszystkich testów możesz być spokojny o swój system.

Jeśli na późniejszych etapach wystąpią jakiekolwiek problemy z programem (np. Gdy baza danych zwróci określoną wartość, połączenie sieciowe zostanie przerwane), należy spróbować usunąć te testy w testach integracyjnych. Kompilacja zatwierdzeń najprawdopodobniej jest szybsza niż kontrola jakości;)

Chomik
źródło