Samouczek dotyczący testowania integracyjnego za pomocą Bitbucket Pipelines

Dowiedz się, jak przeprowadzać testy integracyjne za pomocą Bitbucket Pipelines, mając wiele usług działających w oddzielnych kontenerach Docker w pipelinie.
Testowanie jest kluczową częścią procesu ciągłej integracji i ciągłego dostarczania. Jeśli natomiast stosujesz ciągłe wdrażanie, będzie to ostatnia linia obrony przed błędami, zanim zmiany zostaną udostępnione klientom. Testy jednostkowe sprawdzające poprawność poszczególnych metod i klas to świetny początek, aby zapobiec problemom, ale konieczne będzie również przeprowadzenie testów integracyjnych, które potwierdzą, że różne moduły używane przez aplikację (serwer aplikacji, baza danych, pamięć podręczna) poprawnie współdziałają ze sobą. W tym samouczku zobaczymy, jak przeprowadzać testy integracyjne za pomocą Bitbucket Pipelines, mając wiele usług działających w oddzielnych kontenerach Docker w pipelinie.
Czas
30 minut
Publiczność
Jeśli dopiero zaczynasz korzystać z ciągłej integracji i/lub Bitbucket Pipelines
WARUNEK WSTĘPNY
Node w wer. 4.6 lub nowszej do uruchomienia aplikacji
Docker Community Edition w wer. 17.03 lub nowszej do uruchomienia MongoDB na komputerze lokalnym
Terminal do wykonywania poleceń bash
Git do zarządzania repozytorium i wypychania go z powrotem do Bitbucket Cloud
Krok 1: Uruchomienie przykładowej aplikacji lokalnie
Użyjemy podstawowej aplikacji Node.js, która wyświetla komunikat na stronie głównej i rejestruje wizyty w bazie danych. Aby skupić się na konfiguracji Bitbucket Pipelines, możesz po prostu sklonować aplikację z poziomu terminala.
git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.gitTeraz przejdź do lokalnego repozytorium i uruchom polecenie npm install, aby zainstalować zależności wymagane przez aplikację.
cd bitbucket-pipelines-services-tutorial
npm installPrzed uruchomieniem aplikacji trzeba będzie rozpocząć nową instancję MongoDB. Dzięki platformie Docker możesz to łatwo zrobić z poziomu terminala.
docker run --name mongodb -d -p 27017:27017 mongoNastępnie uruchom aplikację i przejdź do adresu http://localhost:3000, aby zobaczyć, jak działa.
npm start
Możesz przejść do adresu http://localhost:3000/visits, aby upewnić się, że wizyta została poprawnie zarejestrowana w bazie danych.

Na koniec upewnijmy się, że testy kończą się powodzeniem lokalnie, korzystając z polecenia npm test. Po uruchomieniu tego polecenia powinny być widoczne dwa testy.
npm test
Ta przykładowa aplikacja uruchamia dwa różne testy:
Jeden, który sprawdza, czy aplikacja wyświetla komunikat Hello World na stronie głównej.
Drugi, który sprawdza, czy nowa wizyta jest rejestrowana w bazie danych za każdym razem, gdy ktoś wejdzie na stronę główną.
Pierwszy test zakończy się powodzeniem, nawet jeśli baza danych nie działa, ale drugi test jest testem integracyjnym, który sprawdza, czy aplikacja internetowa współdziała poprawnie z serwerem bazy danych. Można go również traktować jako test funkcjonalny, ponieważ weryfikuje niektóre wymagania biznesowe aplikacji. Więcej informacji o różnych typach testów można znaleźć w naszym przewodniku.
Zobaczymy teraz, jak za pomocą Bitbucket Pipelines zautomatyzować testowanie aplikacji i przeprowadzić konfigurację na potrzeby prawidłowej współpracy z bazą danych.
Krok 2: Automatyczne przeprowadzanie testów za pomocą Bitbucket Pipelines
Zacznij od utworzenia nowego repozytorium na koncie Bitbucket i zaktualizuj zdalny adres URL żródła (origin), aby wskazywał na repozytorium Bitbucket.
git remote add bitbucket git@bitbucket.org:<account name>/<repository name>.git
git branch -m mainline
git push -u bitbucket mainlinePrzejdź do sekcji Pipelines repozytorium, aby włączyć Bitbucket Pipelines.

Możesz użyć domyślnego szablonu JavaScript na następnym ekranie. Będzie on już zawierał polecenia npm install i npm test potrzebne do zainstalowania zależności i uruchomienia pakietu testów.

Plik bitbucket-pipelines.yml powinien wyglądać mniej więcej tak.
image: node:16
pipelines:
default:
- parallel:
- step:
name: Build and Test
caches:
- node
script:
- npm install
- npm testBrakuje usługi bazy danych, ale dodamy ją później.

Po wykonaniu commitu pliku nastąpi przekierowanie do sekcji Pipelines repozytorium, gdzie możesz zobaczyć swój pierwszy pipeline w toku. Pipeline zakończy się niepowodzeniem, ponieważ drugi test nie może zostać przeprowadzony poprawnie bez połączenia z bazą danych. Jeśli przejdziesz do pipeline'u, zobaczysz ekran podobny do tego poniżej, na którym będzie widoczna informacja, że 1 test się powiódł, a 1 — nie.

W następnej sekcji rozwiążemy ten problem, dodając nową definicję usługi do konfiguracji Pipelines.
Krok 3: Dodawanie definicji usługi dla bazy danych
Dzięki Bitbucket Pipelines możesz uruchomić, oprócz głównej aplikacji działającej w pipelinie, do 3 dodatkowych kontenerów Docker. Możesz użyć tych kontenerów do uruchamiania usług, takich jak magazyn danych, narzędzie analityczne lub dowolna usługa zewnętrzna, która może być niezbędna do ukończenia pipeline'u przez aplikację. W naszym przypadku użyjemy oddzielnego kontenera usługi do uruchomienia MongoDB.
Przejdź do sekcji źródła repozytorium, aby zobaczyć listę plików.

Kliknij plik konfiguracji bitbucket-pipelines.yml, aby uzyskać do niego dostęp. W prawym górnym rogu znajdziesz przycisk Edit (Edytuj). Kliknij go, aby edytować plik i wykonać jego commit bezpośrednio z poziomu przeglądarki.
Musimy dodać definicję usługi dla naszej bazy danych na dole pliku konfiguracji.
bitbucket-pipelines.yml
image: node:16
pipelines:
default:
- step:
script:
- npm install
- npm test
definitions:
services:
database:
image: mongoW przypadku MongoDB nie potrzebujemy żadnych dodatkowych ustawień w definicji obrazu, ale niektóre obrazy Docker magazynów danych i usług mogą wymagać określenia pewnych zmiennych środowiskowych. Listę przykładów baz danych można znaleźć w dokumentacji Bitbucket Pipelines.
Przed wykonaniem commitu pliku należy dodać nową usługę do kroku, w którym wykonywane są testy. Ostateczna konfiguracja Pipelines powinna wyglądać jak w poniższym kodzie.
bitbucket-pipelines.yml
image: node:16
pipelines:
default:
- step:
script:
- npm install
- npm test
services:
- database
definitions:
services:
database:
image: mongoPrzejdź do sekcji Pipelines po wykonaniu commitu pliku, aby zobaczyć pipeline w toku. Zazwyczaj powinien zakończyć się powodzeniem.

Możesz kliknąć kartę database w panelu dzienników, aby zobaczyć dzienniki kontenera MongoDB.

To wszystko! Teraz juz wiesz, jak dodać usługi do pipeline'u, aby przeprowadzić testy integracyjne. Nie zapomnij przeczytać dokumentacji, aby uzyskać więcej informacji o korzystaniu z tych usług.