Kode tilkyttet foredrag "Cucumber kombinert med WireMock" på Testdagen Odin 2023:
I dette sporet vil du få se hvordan man kan spesifisere et systems oppførsel i scenario-format, og basert på dette bruke Cucumber til å implementere automatiserte tester og levende dokumentasjon. Du vil også få se noen eksempler på hvordan WireMock kan brukes både til å redusere avhengigheter og gi mer stabile tester, og for å enklere teste spesialtilfeller og feilscenarier.
- Enkel, hjemmesnekret applikasjonsserver med HTTP REST-grensesnitt (TypeScript, NodeJS, Express)
- Overordnet funksjonalitet:
- Hente værmelding fra Yr (met.no) for en navngitt lokasjon
- Legge til og fjerne lokasjoner
- Ingen persistering/permanent lagring
- API-endepunkter:
GET /health
- Returner status OK så lenge applikasjonen er oppeGET /health/yr
- Gjør helsesjekk av Yr sitt API og returner en statusGET /locations
- List ut registrerte lokasjonerPOST /locations
- Legg til en ny lokasjon- Format:
{ name: string, coordinates: { lat: float, lon: float } }
- Format:
GET /locations/:name
- Hent en registrert lokasjonDELETE /locations/:name
- Slett en registrert lokasjonGET /weather/:locationName
- Hent en enkel værmelding for en registrert lokasjon
- API-dokumentasjon fra Yr / met.no:
- Implementert som black-box systemtester mot REST-grensesnitt på SUT (TypeScript, CucumberJS, WireMock)
- Noen utvalgte scenarier for de ulike API-endepunktene
- Kompliserende faktor: Mocking av endepunkter over HTTPS
- Implementert som black-box systemtester mot REST-grensesnitt på SUT (Kotlin, Cucumber-JVM, REST Assured, WireMock)
- Ellers som over
Anbefaler å bruke NVM til å installere og håndtere Node-versjoner.
Koden er utviklet og testet med Node v20.4 (spesifisert i .nvmrc
).
Følg instruksjoner på https://github.com/nvm-sh/nvm.
Naviger inn i mappen med repoet og kjør følgende kommando for å installere Node-versjon fra .nvmrc
:
nvm install
Når riktig versjon er installert, kan man deretter velge gjør denne aktiv med kommandoen:
nvm use
Følg instruksjoner på https://docs.docker.com/desktop/.
docker compose up -d
cd sut
npm install
npm run start
npm run test:local
npm run test:cloud
cd cucumber
npm run cucumber:local
npm run cucumber:cloud
cd cucumber-kotlin
./gradlew test
./gradlew test -Dwiremock.host=odin2023.wiremockapi.cloud -Dwiremock.port=443
Scenarioet "Applikasjonen skal gi status ikke OK hvis Yr ikke svarer OK på status" i health.feature
har en stegdefinisjon som ikke er implementert.
Finn og implementer dette steget.
Det finnes allerede et par scenarier for henting av værmelding for en gitt lokasjon, men dekningen er ikke god og bør utvides.
Deloppgaver:
- Formulér et scenario der henting av værmelding fra Yr feiler
- Implementer eventuelle manglende stegdefinisjoner
SUT returnerer tre ulike forenklede værmeldinger basert på værdataene som returneres fra met.no/yr.no.
Deloppgaver:
- Formulér scenarier som dekker denne funksjonaliteten
- Implementer stegdefinisjoner med eventuelle mockdata nødvendig for automatisert, black-box systemtesting av dette
Tips: Se ./sut/src/models/weather.ts
for definisjoner på de tre ulike værtypene.