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

  • Konto Bitbucket

  • 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.git

Teraz przejdź do lokalnego repozytorium i uruchom polecenie npm install, aby zainstalować zależności wymagane przez aplikację.

cd bitbucket-pipelines-services-tutorial
npm install

Przed 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 mongo

Nastę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 mainline

Przejdź 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 test

Brakuje 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: mongo

W 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: mongo

Przejdź 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.

Polecane dla Ciebie

Społeczność DevOps

Ścieżka szkoleniowa DevOps

Zacznij korzystać bezpłatnie