Close

Tutorial integratietesten met Bitbucket Pipelines

Headshot van Sten Pittet
Sten Pittet

Mede-auteur

Leer hoe je integratietests uitvoert met Bitbucket Pipelines door meerdere services in afzonderlijke Docker-containers uit te voeren in een pipeline.

Testen is een cruciaal onderdeel van continue integratie en continue levering. En als je continue implementatie gebruikt, is dit de laatste kans om bugs tegen te houden voordat wijzigingen gereleased worden aan je klanten. Unit-tests die individuele methoden en klassen valideren, zijn een goede manier om problemen te voorkomen, maar je zult ook integratietests moeten uitvoeren die ervoor zorgen dat de verschillende modules die door je toepassing worden gebruikt (toepassingsserver, database, cache) goed met elkaar samenwerken. In deze tutorial zie je hoe je integratietests kunt uitvoeren met Bitbucket Pipelines door meerdere services in afzonderlijke Docker-containers uit te voeren in een pipeline.

Tijd

30 minuten

Publiek

Continue integratie en/of Bitbucket Pipelines zijn nieuw voor je

Vereisten

  • Een Bitbucket-account
  • Node-versie 4.6 of hoger om de toepassing uit te voeren

  • Docker Community Edition-versie 17.03 of hoger om MongoDB op je lokale computer uit te voeren

  • Een terminal om bash-opdrachten uit te voeren
  • Git om de repository te beheren en terug te pushen naar Bitbucket Cloud

Stap 1: De voorbeeldtoepassing lokaal uitvoeren

We gebruiken een eenvoudige Node.js-toepassing die een bericht op de startpagina toont en bezoeken aan een database registreert. Je kunt de toepassing eenvoudig vanaf je terminal klonen om je volledig te concentreren op de Bitbucket Pipelines-configuratie.

git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.git

Ga nu naar je lokale repository en voer npm install uit om de afhankelijkheden te installeren die vereist zijn door de toepassing.

cd bitbucket-pipelines-services-tutorial
npm install

Voordat we de toepassing uitvoeren, moeten we een nieuwe MongoDB-installatie starten. Dankzij Docker is dit iets dat je gemakkelijk kunt doen vanaf je terminal.

docker run --name mongodb -d -p 27017:27017 mongo

Start vervolgens je toepassing en ga naar http://localhost:3000 om de toepassing in actie te zien.

npm start

Je kunt naar http://localhost:3000/visits gaan om er zeker van te zijn dat een bezoek correct is gelogd in de database.

Laten we er ten slotte voor zorgen dat de tests lokaal met succes worden voltooid via de opdracht npm test. Er zouden twee tests voltooid moeten worden nadat de opdracht is uitgevoerd.

npm test

Deze voorbeeldtoepassing voert twee verschillende tests uit:

  • Eén test die verifieert dat de toepassing Hello World op de startpagina toont.
  • Eén test die verifieert dat een nieuw bezoek wordt geregistreerd in de database wanneer iemand de startpagina bezoekt.

De eerste test slaagt zelfs als de database niet beschikbaar is, maar de tweede test is een integratietest die controleert of de webtoepassing correct samenwerkt met de databaseserver. Het kan ook worden opgevat als een functionele test, aangezien enkele zakelijke vereisten van de toepassing worden geverifieerd. Meer informatie over de verschillende soorten tests vind je in onze handleiding.

We gaan nu kijken hoe je Bitbucket Pipelines kunt gebruiken om het testen van je toepassing te automatiseren en te configureren om goed te kunnen gebruiken met een database.

Stap 2: Tests automatisch uitvoeren met Bitbucket Pipelines

Begin met het aanmaken van een nieuwe repository in je Bitbucket-account en werk de externe URL voor origin bij om naar je Bitbucket-repository te verwijzen.

git remote add bitbucket git@bitbucket.org:<account name>/<repository name>.git
git branch -m mainline
git push -u bitbucket mainline

Ga naar het Pipelines-gedeelte van je repository om Bitbucket Pipelines in te schakelen.

Je kunt de standaard Javascript-sjabloon in het volgende scherm gebruiken. Deze bevat al de npm install- en npm test-opdrachten die je nodig hebt om afhankelijkheden te installeren en de testsuite uit te voeren.

Het bitbucket-pipelines.yml-bestand zou er ongeveer zo uit moeten zien.

image: node:16

pipelines:
  default:
    - parallel:
        - step:
            name: Build and Test
            caches:
              - node
            script:
              - npm install
              - npm test

De databaseservice ontbreekt, maar deze zullen we later toevoegen.

Nadat je je bestand hebt gecommit, word je naar de sectie Pipelines van je repository geleid waar je je eerste pipeline in uitvoering kunt zien. Je pipeline zal mislukken omdat de tweede test niet goed kan worden uitgevoerd zonder een databaseverbinding. Als je doorklikt naar je pipeline, zou je een scherm moeten zien dat lijkt op het onderstaande scherm waarin staat dat één test is geslaagd en één test is mislukt.

In het volgende gedeelte zullen we dit probleem oplossen door een nieuwe servicedefinitie toe te voegen aan je Pipelines-configuratie.

Stap 3: Een servicedefinitie toevoegen voor de database

Met Bitbucket Pipelines kun je maximaal drie extra Docker-containers uitvoeren bovenop de hoofdtoepassing die in een pipeline wordt uitgevoerd. Je kunt deze containers gebruiken om services uit te voeren, zoals een datastore, analysetool of een service van derden die je toepassing mogelijk nodig heeft om de pipeline te voltooien. In ons geval zullen we een aparte servicecontainer gebruiken om MongoDB uit te voeren.

Ga naar het brongedeelte van je repository om de lijst met bestanden te zien.

Klik op het bitbucket-pipelines.yml-configuratiebestand om er toegang toe te krijgen. In de rechterbovenhoek vind je de knop Bewerken waarmee je het bestand kunt bewerken en rechtstreeks vanuit je browser kunt committen.

Onderaan het configuratiebestand moet er een servicedefinitie voor onze database worden toegevoegd.

bitbucket-pipelines.yml

image: node:16

pipelines:
  default:
    - step:
        script:
          - npm install
          - npm test

definitions:
  services:
    database:
      image: mongo

In het geval van MongoDB hebben we geen extra instellingen nodig in de image-definitie, maar voor sommige Docker-images voor datastores en services moet je mogelijk enkele omgevingsvariabelen opgeven. Je kunt een lijst met database voorbeelden vinden in de documentatie van Bitbucket Pipelines.

Voordat je het bestand commit, moet je de nieuwe service toevoegen aan de stap die de tests uitvoert. De uiteindelijke configuratie van Pipelines moet eruitzien als de onderstaande code.

bitbucket-pipelines.yml

image: node:16

pipelines:
  default:
    - step:
        script:
          - npm install
          - npm test
        services:
          - database

definitions:
  services:
    database:
      image: mongo

Ga naar je Pipelines-gedeelte nadat je het bestand hebt gecommit om de voortgang van de pipeline te zien. Deze zou normaal gesproken gewoon voltooid moeten worden.

Je kunt op het databasetabblad in het logpaneel klikken om de logs van de MongoDB-container te zien.

Dat was het! Je weet nu hoe je services aan je pipeline toevoegt om integratietests uit te voeren. Vergeet niet de documentatie te lezen om meer te weten te komen over hoe je deze services kunt gebruiken.

Sten Pittet
Sten Pittet

Ik zit nu 10 jaar in de softwarebusiness in verschillende rollen, van ontwikkeling tot productmanagement. Nadat ik de afgelopen 5 jaar in Atlassian heb gewerkt aan ontwikkelaartools, schrijf ik nu over het bouwen van software. Buiten het werk om ontwikkel ik mijn vader-vaardigheden met een geweldige peuter.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Toelichting DevOps

DevOps-community

Toelichting DevOps

DevOps-leertraject

Afbeelding van kaart

Gratis aan de slag

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up