Evo kako testira vanjske API-je u eliksiru s premosnicom

$config[ads_kvadrat] not found

САМЫЙ ЛУЧШИЙ В МИРЕ 3Д ПРИНТЕР АНАЛОГОВ НЕ СУЩЕСТВУЕТ Flying Bear Ghost 5

САМЫЙ ЛУЧШИЙ В МИРЕ 3Д ПРИНТЕР АНАЛОГОВ НЕ СУЩЕСТВУЕТ Flying Bear Ghost 5

Sadržaj:

Anonim

Prioritet je princip arhitekture orijentiran na uslugu na adresi Inverzan, To znači da imamo male, održive komponente s jasno definiranim odgovornostima. Oni komuniciraju jedni s drugima (uglavnom), putem predstavničkog prijenosa stanja ili REST-a, API-ja.

To osigurava fleksibilnost i dobro nam služi uz izuzetak jednog značajnog aspekta: Testiranje. Prilikom testiranja treba izbjegavati:

  • Ovisnost o vanjskim uslugama koje se izvode na istom stroju.
  • Spori testovi.

Budući da se aplikacije inherentno oslanjaju na vanjske usluge, ključno je imati strategiju testiranja za te ovisnosti.

Nedavno smo počeli koristiti obilaznicu i objasnit ću vam kako smo stigli i konkretno kako ga koristimo.

Prošlost

Ismijavajte metode i vratite neke primjere podataka poput ovog:

To je bio (i vjerujem da je još uvijek) “put do“ u svijetu Ruby / Railsa. Nažalost, to potiče loše ponašanje koje najbolje objašnjava ovdje José Valim.

Zatim smo počeli koristiti ExVCR, koji je velika biblioteka, ali ima slične nedostatke kao i mock / stubs: potiče lijenost i ne potiče razdvajanje briga koje su kritične za dobro definirane API-je. ExVCR omogućuje snimanje i reprodukciju real-live podataka. Vrlo se lako integrira (uključujući nekoliko redaka u testu i za sve ostalo se brine). No, u idealnom slučaju morate razmišljati o vanjskim ovisnostima u testovima, a ne ih izdvajati. To bi još uvijek mogao biti izvediv izbor za scenarije kada bi ponašanje krajnje točke trebalo testirati s minimalnim opterećenjem (koristimo ga za testiranje poziva na Amazonove AWS usluge kao što je S3).

Unesite adaptore

Adapteri rade sjajno i promiču promišljanje oko API ugovora i jasno definirane granice komunikacije. Još uvijek koristimo ovaj pristup, osobito kada je Adapter složeniji (kao JSON-RPC socket).

Ovako izgleda adapter:

Ali za jednostavne HTTP krajnje točke, adapteri izgledaju kao puno posla i imaju veliki nedostatak: oni napuštaju knjižnice koje konzumiraju iz jednadžbe testiranja. Ako se nešto promijeni u HTTP ili JSON knjižnicama, testovi ga neće uhvatiti. Količina kritičnog produkcijskog koda koji nije ispitan ovim pristupom je neprihvatljiva.

Sadašnjost i budućnost

Bypass nam omogućuje da pokrenemo vrlo jednostavan web poslužitelj u testovima koji simuliraju vanjske usluge koje koristimo.

Sada možemo testirati cijeli stack, uključujući HTTP knjižnicu, JSON knjižnicu za kodiranje / dekodiranje i mehanizme provjere autentičnosti. Obilaznica README je dobro napisana, tako da ću poštedjeti detalje implementacije. Međutim, neznatno mijenjamo način na koji ga koristimo kako bismo testove saželi i čitali:

Prije svega, ponekad želimo pozvati Facebook kada se testovi pokreću kao kompletni paket za integraciju. To radimo neredovito kako bismo osigurali funkcioniranje Facebook API-ja prema našim očekivanjima. Dodavanje - uključiti integraciju do mješoviti test ne simulira API, već umjesto toga poziva vanjsku uslugu (redovi 5, 7).

Mi smo eksplicitni kada simuliramo zahtjeve za vanjskim uslugama tako da svaki test koji koristi premosnicu mora imati @tag facebook_bypass (redak 7).

Konačno, handle_fb funkcija (linije 30-39) se naziva (s obzirom na to da je request_path odgovara). Volim uparivanje u funkcijskoj glavi jer ona eksplicitno određuje put na koji reagiramo i omogućuje nam definiranje različitih funkcija za različite putove.

Dakle, zaobići se pokreću samo testovi s oznakom @tag: zaobići i kada ne vodimo integracijski paket. Još jedna stvar koju radimo prilikom postavljanja obilaznice je da oznaka prođe id stranice (redovi 8, 20). Evo kako test koji koristi obilazak izgleda u svoj njegovoj veličini:

Kao što možete vidjeti facebook_bypass oznaka čini izričito da simuliramo API (osim ako smo u načinu integracije). Omogućuje nam prosljeđivanje informacija simuliranom API-ju, a vrlo je lako ponovno koristiti isti Bypass config za različite testove.

Nadam se da će vam to pomoći u testiranju vanjskih API-ja. Možete me pronaći na Twitteru (vidi dolje) ako imate dodatnih pitanja.

$config[ads_kvadrat] not found