introduction contract testing with examples
U ovom vodiču za ugovorno testiranje objašnjeno je što je to ugovorno testiranje na osnovi potrošača, kako funkcionira i zašto biste ga trebali koristiti u svojoj strategiji testiranja:
Što je ugovorno testiranje?
Potrošačko testiranje po ugovoru oblik je API testiranja koji uistinu omogućuje pomicanje ulijevo. Ugovorni alat koji koristimo je Pakt.io , a o tome ćemo saznati kasnije u ovoj seriji vodiča.
Testiranje ugovora metoda je kojom se neovisno provjerava integracija dviju aplikacija kako bi se testiralo što je proslijeđeno i vidjelo odgovara li ono što se vraća s 'ugovorom'.
Ugovorni testovi lijepo se uklapaju u arhitekturu mikroservisa, radeći u agilnom okruženju. Stoga će se primjeri temeljiti na iskustvu koje smo stekli radeći u ovom okruženju.
Što ćete naučiti:
- Popis tutorijala u ovoj seriji za ispitivanje ugovora
- Ispitivanje ugovora prema potrošačima
- Ugovorno ispitivanje protiv integracijskog ispitivanja
- Kontinuirana integracija
- Zaključak
Popis tutorijala u ovoj seriji za ispitivanje ugovora
Vodič br. 1: Uvod u ispitivanje ugovora s primjerima [Ovaj vodič]
Vodič br. 2: Kako napisati test potrošačkog pakta na JavaScript-u
Vodič br. 3: Kako objaviti ugovor o ugovoru s posrednikom za pakte
Vodič br. 4: Provjerite ugovor o ugovoru i kontinuiranu implementaciju pomoću Pact CLI
Ispitivanje ugovora prema potrošačima
Polazna točka je vaša API dokumentacija koja tvori ugovor za vaše testove, u ovom trenutku razvojni timovi obično uzimaju API dokument i razvijaju se prema wiki dokumentu (ili bilo kojem formatu koji se nalazi u vašoj organizaciji, kao što je Word dokument).
Na primjer, web aplikacija gdje front-end razvija Team Krypton, a API razvija Team Thoron. Projekt započinje početnim sastankom na kojem se prezentiraju i dogovaraju zahtjevi između timova.
Svaki tim uzima zahtjeve i pročišćavanjem priča započinje stvaranje zaostalih predmeta. Razvoj započinje u oba tima prateći korisničke priče, integracijsko testiranje ostavljeno je za kasniji sprint. Kako tim Krypton pronalazi dodatne zahtjeve, koji se odnose na scenarije pogrešaka, API dokumentacija se u skladu s tim ažurira.
Team Thoron dodaje test slučajeve povezane s ažuriranim scenarijima na temelju dokumentacije.
Već možemo vidjeti nekoliko nedostataka u ovom procesu, a dodao sam još nekoliko za sreću:
- Izmjene API dokumenta možda se neće učinkovito komunicirati.
- Front-end tim umanjuje back-end uslugu i obrnuto.
- Back-end tim stvara slučajeve integracijskih testova na temelju dokumentacije.
- Integracijsko okruženje je prvi put da se testira potpuna integracija.
- Različita API verzija o integracijskom okruženju u odnosu na proizvodnju.
Potrošačko testiranje ugovora ima dvije strane, tj. Potrošača i davatelja usluga. Tu se preokreće tradicionalno razmišljanje o testiranju u mikroservisima.
The Potrošač kustos je scenarija, uključujući zahtjev i očekivani odgovor. To vam omogućuje da slijedite Bedev zakon što nalaže da biste trebali biti fleksibilni u onome što vaš API može prihvatiti, ali konzervativni u onome što se šalje. Vraćajući se na nedostatke br. 1, 3 i 4, promjene dokumentacije pokreće potrošač.
Na primjer, u okolnosti kada Team Thoron promijeni polje niza kako ne bi prihvatio null vrijednosti, potrošački testovi ne bi odrazili promjenu i stoga ne bi uspjeli. Ili barem dok promjene nisu napravljene na timu Krypton.
[slika izvor ]
The Pružatelj usluga provjerava scenarije koje pruža potrošač u odnosu na njihovo 'razvojno' okruženje. To omogućuje primenu vaših mikro usluga Paralelna promjena u kojem se navodi da biste trebali proširiti funkcionalnost API-ja, nakon čega slijedi prelazak na novu verziju. Vraćajući se na nedostatak br. 2, kvarovi koje obično stvaraju pozadinski timovi za vlastite potrebe ispitivanja sada se mogu temeljiti na potrošačkim scenarijima koristeći Pact Stub Server .
Obvezujući element dviju strana je 'ugovor' koji treba podijeliti između timova. Pakt pruža platformu koja omogućava dijeljenje ugovora zvanih Broker pakta (dostupno kao upravljana usluga s Pactflow.io ).
The Posrednik pohranjuje rezultate potrošačkih scenarija. Ugovor se zatim pohranjuje kod posrednika uz verziju API-ja. To omogućuje testiranje na više verzija API-ja, tako da se kompatibilnost može potvrditi prije izdanja, kao što je istaknuto u nedostatku br. 5.
Dodatna pogodnost Pact Brokera na naslijeđenim platformama je vidljivost potrošača. Nisu svi potrošači poznati autorima API-ja, pogotovo nije kako se oni konzumiraju.
Konkretno, pozivajući se na pojavu u kojoj su podržane dvije verzije API-ja, došlo je do problema s podacima unutar verzije 1 (V1) zbog čega je API uzrokovao prljavi podaci u bazi podataka.
Promjena je implementirana u V1 API-ja i gurnuta u proizvodnju, međutim, potrošač se pouzdao u format koji je uzrokovao problem s podacima, čime je prekinuo njihovu integraciju s API-jem.
Kako radi
Gornji primjer prikazuje tijek provjere autentičnosti, web usluga zahtijeva od korisnika provjeru autentičnosti kako bi pristupili osjetljivim podacima. Web usluga API-ju šalje zahtjev za generiranje tokena pomoću korisničkog imena i lozinke. API vraća token nositelja koji se dodaje zahtjevu za podatke kao zaglavlje provjere autentičnosti.
Potrošački test konstruira POST zahtjev za token prosljeđivanjem tijela s korisničkim imenom i lozinkom.
Tijekom testa okreće se lažni poslužitelj koji potvrđuje zahtjev koji konstruirate, zajedno s očekivanim odgovorom koji u ovom primjeru uključuje vrijednost za token.
Rezultat testa potrošača generira datoteku ugovora o paktu. To će biti pohranjeno u posredniku pakta kao verzija 1.
Davatelj zatim povlači verziju 1 od brokera pakta i ponavlja taj zahtjev u njihovom lokalnom okruženju, provjeravajući da li se zahtjev i odgovor podudaraju sa zahtjevima potrošača.
Uloge i odgovornosti
Osiguranje kvalitete (QA) / Tester: Stvaranje ugovora pomoću Pact.io-a i rad s BA za generiranje testnih scenarija.
Razvojni programer: Spajanje s QA-ima na stvaranju testova i pomaganju umotavanja API-ja za implementaciju u kontinuiranu integraciju (CI).
Poslovni analitičar (BA): Izrada scenarija i suradnja s arhitektom na provjeri pogođenih strana.
Pitanja i odgovori za ispitivanje automatizacije selena u selenu
Arhitekt rješenja (Možda ne postoji u vašoj organizaciji): djelovanje na promjenama API-ja i koordinacija s BA-om na implementaciji, također priopćavanje promjena potrošačima (pomoću Pact Brokera da biste razumjeli koga se to može tiče).
Upravljanje izdanjem: (Da, znam da je staromodan, ali i dalje postoji u mom svijetu): Ispunjen uvjerenjem da će promjene biti uspješno objavljene zbog pokrivanja ugovornim testiranjem.
Cijeli tim: Provjerite rezultate da biste utvrdili mogu li se izdanja gurnuti u proizvodnju pomoću alata Pact CLI, Mogu li se rasporediti .
Ugovorno ispitivanje protiv integracijskog ispitivanja
Integracijsko testiranje mora postojati kako bi se provjerilo radi li sustav prije promocije u proizvodno okruženje, ali scenariji se mogu značajno smanjiti.
Utjecaj ovoga mogao bi biti:
- Brže povratne informacije prije puštanja u integracijsko okruženje.
- Manje oslanjanje na stabilnost integracijskog okruženja.
- Manje okruženja koja podržavaju više verzija API-ja.
- Smanjene instance nestabilne okoline zbog problema s integracijom.
Integracija | Ugovor | |
---|---|---|
Jasno je utvrditi neuspjeh | Mnogo slojeva | Vrlo jednostavno |
Konfiguracija API-ja | Da | Nemoj |
Provjere primjene | Da | Nemoj |
Izrada verzija API-ja | Da | Da |
Otklanjanje pogrešaka lokalno | Nemoj | Da |
Pitanja okoliša | Da | Nemoj |
Vrijeme povratne informacije | Usporiti | Brzo |
Prvo, ugovorno testiranje ne zamjenjuje integracijsko testiranje. No, vjerojatno može zamijeniti neke od vaših postojećih scenarija testiranja integracije, pomaknuti se ulijevo i pruža brže povratne informacije o vašem životnom ciklusu razvoja softvera.
U integracijskom testiranju provjeravat ćete kontekst u kojem živi API, poput arhitekture okoliša, procesa implementacije itd.
Stoga želite pokrenuti osnovne scenarije testa koji bi potvrdili konfiguraciju, na primjer, krajnja točka zdravstvene provjere za api verziju. Također dokazujući je li implementacija bila uspješna, vraćajući odgovor 200.
Tijekom testiranja ugovora testirate specifičnosti API-ja, što uključuje rubne slučajeve povezane s API strukturom, sadržajem (npr. Vrijednosti polja, ključevi postoje) i odgovorima na pogreške. Na primjer, obrađuje li API null vrijednosti ili su one uklonjene iz API odgovora (još jedan stvarni primjer).
Neke pogodnosti (ako već niste prodani)
U nastavku su navedene neke od pogodnosti koje treba iskoristiti prilikom prodaje ugovora za ispitivanje širem poduzeću:
- Brže uvođenje softvera
- Jedan izvor istine
- Vidljivost svih potrošača
- Jednostavnost testiranja na različite verzije API-ja.
Često postavljana pitanja
Neka uobičajena pitanja dok pokušavate nagovoriti ljude da usvoje testiranje na ugovoru uključuju:
P # 1) Već imamo 100% pokrivenost testom, tako da nam nije potrebna.
Odgovor: Pa to je nemoguće, ali ugovorno testiranje ima i mnogo drugih prednosti, a ne samo pokrivanje testova.
P # 2) Odgovornost arhitekta rješenja je da komunicira s promjenama API-ja.
Odgovor: Kvaliteta je odgovornost cijelog tima.
P # 3) Zašto stvaramo testne scenarije za API tim?
Odgovor: API tim ne zna kako web usluga funkcionira, pa zašto bi ona trebala biti tamo odgovorna.
P # 4) Naši testovi od kraja do kraja obuhvaćaju cijeli tok od početka do kraja, uključujući i druge točke integracije.
Odgovor: Točno zašto dijelimo testove da bismo testirali jednu stvar, a nije vaša odgovornost da testirate protok od kraja do kraja za koji ne znate kako funkcionira.
P # 5) U spremištu kojeg tima žive testovi?
Odgovor: Oba. Potrošač u svom spremištu, a pružatelj u svom spremištu. Tada u središnjoj točki, ugovor živi izvan bilo koje od njih.
Argumenti
Ovo su argumenti protiv kojih nam je teško raspravljati kada je u pitanju prelazak na ugovor za testiranje:
- Swagger dokumentacija već postoji i može se koristiti za generiranje integracijskih testova.
- Timovi posjeduju i front-end i back-end usluge s učinkovitim mehanizmom za promjene API-ja.
Kontinuirana integracija
Kako se to uklapa u vaš testni paket za kontinuiranu integraciju? Poželjno mjesto za testiranje po ugovoru je uz vaše jedinstvene testove.
Potrošački testovi okreću lažni poslužitelj koji ne zahtijeva vanjske ovisnosti izvan testa.
Testovi davatelja zahtijevaju instancu API-ja, stoga se lokalni API može omotati pomoću testni poslužitelj u memoriji . Međutim, ako nije lako lokalno omotati svoj API, zaobilazno rješenje koje smo prethodno koristili je kada smo izdvojili okruženje i rasporedili kôd u ovo okruženje kao dio automatskih provjera zahtjeva za povlačenjem.
[slika izvor ]
Zaključak
U ovom vodiču naučili smo što znači testiranje ugovora i kako to izgleda u infrastrukturi mikroservisa, te vidjeli kako to izgleda na primjeru iz stvarnog svijeta.
Naučene su lekcije o tome kako vam testiranje ugovora može pomoći da pomaknete svoje integracijsko testiranje ulijevo. Osim toga, vidjeli smo kako to može smanjiti troškove za vašu organizaciju smanjenjem vremena povratnih informacija povezanih s problemima integracije.
Testiranje po ugovoru nije samo alat za tehničko ispitivanje, već provodi suradnju razvojnih timova komuniciranjem promjena i poticanjem testiranja kao jedne cjeline. Sve u svemu, ovo bi trebao biti preduvjet svima koji žele prijeći na kontinuiranu implementaciju.
SLJEDEĆA Vodič
Preporučena literatura
- Kako napisati test potrošačkog pakta na JavaScript-u
- Provjerite ugovor o ugovoru i kontinuiranu implementaciju pomoću Pact CLI
- Kako objaviti ugovor o ugovoru s posrednikom za pakte
- Kontinuirani proces integracije: kako poboljšati kvalitetu softvera i smanjiti rizik
- Razlike između jedinstvenog testiranja, integracijskog ispitivanja i funkcionalnog ispitivanja
- Što je integracijsko testiranje (Vodič s primjerom integracijskog testiranja)
- 10 najboljih alata za testiranje integracije za pisanje integracijskih testova
- Kontinuirano postavljanje u DevOps