Intro to Postman Part 3: writing API tests
Innholdsfortegnelse:
Vi prioriterer Service Oriented Architecture-prinsipper på Omvendt. Det betyr at vi har små, vedlikeholdsfrie komponenter med klart definert ansvar. De kommuniserer med hverandre (for det meste), via Representative State Transfer, eller REST, APIer.
Dette gir fleksibilitet og har tjent oss bra med unntak av en betydelig fasett: Testing. Ved testing bør man unngå:
- Avhengighet av eksterne tjenester som kjører på samme maskin.
- Sakte tester.
Fordi applikasjoner i utgangspunktet er avhengige av eksterne tjenester, er det viktig å ha en teststrategi for disse avhengighetene.
Vi har nylig begynt å bruke Bypass, og jeg vil forklare hvordan vi ankom dit og spesifikt hvordan vi bruker det.
Fortiden
Mock metoder og returnere noen eksempel data som dette:
Det var (og jeg tror fortsatt er) "vei å gå" i Ruby / Rails verden. Dessverre fremmer dette dårlig oppførsel som best forklart her av José Valim.
Vi begynte da å bruke ExVCR, som er et flott bibliotek, men har lignende ulemper som mocks / stubber: Det oppfordrer latskap og fremmer ikke adskillelsen av bekymringer som er kritiske for veldefinerte APIer. ExVCR gjør det mulig å "registrere" og "avspille" sanntidsdata. Det er veldig enkelt å integrere (inkludert noen få linjer i testen og alt annet blir tatt vare på). Men ideelt sett må du tenke på eksterne avhengigheter i tester, ikke abstrahere dem ut. Det kan fortsatt være et levedyktig valg for scenarier når endepunktsadferden skal testes med minimal overhead (vi bruker den til å teste anrop til Amazonas AWS-tjenester som S3).
Skriv inn adaptere
Adaptere fungerer bra og fremmer overveielse rundt API-kontrakter og tydelig definerte kommunikasjonsgrenser. Vi bruker fortsatt denne tilnærmingen, spesielt når adapteren er mer kompleks (som en JSON-RPC-kontakt).
Slik ser en adapter ut:
Men for enkle HTTP-sluttpunkter virker adaptrene som mye arbeid og har en stor ulempe: De forlater bibliotekene de forbruker ut av testekvasjonen. Hvis noe i HTTP- eller JSON-bibliotekene endres, vil testene ikke fange det. Mengden av produksjonskritisk kode som ikke er testet ved denne tilnærmingen, er uakseptabel.
Nåtid og fremtid
Bypass tillater oss å starte en veldig enkel webserver i tester som simulerer eksterne tjenester vi bruker.
Nå kan vi teste hele stakken, inkludert HTTP-biblioteket, JSON-kodings- / dekodingsbiblioteket og godkjenningsmekanismer. Bypass README er godt skrevet, så jeg vil spare detaljer om implementering. Vi endrer imidlertid litt hvordan vi bruker det for å holde testene konsise og lesbare:
For det første ønsker vi noen ganger å ringe til Facebook når tester kjøres som en full integrering suite. Vi gjør dette uregelmessig for å sikre at Facebook API fortsatt fungerer etter våre forventninger. legge
- inkludere integrering
til
blandetest
simulerer ikke API-en, men i stedet ringer den eksterne tjenesten (linjer 5, 7).
Vi er eksplisitte når vi simulerer forespørsler til eksterne tjenester, slik at hver test som bruker Bypass må ha
@tag facebook_bypass
(linje 7).
Til slutt,
handle_fb
funksjon (linjer 30-39) blir kalt (gitt at
request_path
fyrstikker). Jeg liker å matche i funksjonshodet, da det tydeliggjør hvilken vei vi reagerer på, og lar oss definere forskjellige funksjoner for forskjellige baner.
Så Bypass kjøres på bare tester merket med
@tag: bypass
og når vi ikke kjører integrationspakken vår. En ting vi gjør mens du konfigurerer bypass, gjør at taggen kan passere et sidens id (linjer 8, 20). Så her er hvordan en test som bruker Bypass ser i all sin herlighet:
Som du kan se, er
facebook_bypass
tag gjør det eksplisitt at vi simulerer API-en (med mindre vi er i integrasjonsmodus). Det tillater oss å sende informasjon til den simulerte API, og det er veldig enkelt å gjenbruke samme Bypass-konfigurasjon for forskjellige tester.
Jeg håper dette hjelper deg med å teste eksterne APIer. Du finner meg på Twitter (se nedenfor) hvis du har flere spørsmål.
Se Zipline Drones Practice Air-Dropping Blood and Medicine til eksterne klinikker i Rwanda

I USA er drone levering fortsatt en nyhet, luksusfenomen som er litt for høyt 2016 for å være en dagligdagse virkelighet. Men i Rwanda kan det være en livreddende utvikling. Zipline, et San Francisco Bay Area-basert dronefirma, debuterte en liten, fast vinge-leverings drone som kan bære små pakker fyller ...
Denne appen vil hjelpe deg med å finne de nærmeste automatiserte eksterne defibrillatorene

Det er velkjent at automatiserte eksterne defibrillatorer (AED) kan bidra til å redde liv for personer som går inn i plutselig hjertestans. Det er imidlertid ikke alltid kjent hvor du kan finne en AED utenfor en medisinsk setting. Nå kan en ny app kalt AED-SOS endre det. Den 9. november 2015, forskere ved den amerikanske H ...
Tegn på at hun tester deg: 11 største tester en jente gjennomfører deg

Bare fordi du hadde en første date, betyr ikke det at du får en annen. Hvis du ikke tar opp skiltene hun tester deg, er sjansen stor for at du ikke vil se henne igjen.