Tukaj je, kako preizkusi zunanje API-je v eliksirju z obvodom

$config[ads_kvadrat] not found

Email рассылка - добавляем smtp релеи

Email рассылка - добавляем smtp релеи

Kazalo:

Anonim

Prednostno obravnavamo načela arhitekture storitveno usmerjene arhitekture Inverse. To pomeni, da imamo majhne, ​​vzdržljive komponente z jasno opredeljenimi odgovornostmi. Med seboj komunicirajo (večinoma) prek predstavniškega prenosa države ali API-jev REST.

To zagotavlja prožnost in nam je dobro služilo z izjemo enega pomembnega vidika: Testiranje. Pri testiranju se je treba izogibati:

  • Odvisnost od zunanjih storitev, ki se izvajajo na istem stroju.
  • Počasni testi.

Ker so aplikacije odvisne od zunanjih storitev, je ključnega pomena imeti strategijo testiranja za te odvisnosti.

Pred kratkim smo začeli uporabljati Bypass in razložil bom, kako smo prispeli tja in kako ga uporabljamo.

Preteklost

Posnemite metode in vrnite nekaj primernih podatkov, kot je ta:

To je bil (in verjamem, da je še vedno) "pot do" v svetu Ruby / Rails. Na žalost to spodbuja slabo vedenje, kar je najbolje razložil José Valim.

Nato smo začeli uporabljati ExVCR, ki je velika knjižnica, vendar ima podobne pomanjkljivosti kot mock / stub: Spodbuja lenobe in ne spodbuja ločevanja vprašanj, ki so ključnega pomena za dobro opredeljene API-je. ExVCR omogoča "zapisovanje" in "predvajanje" real-live podatkov. Zelo enostavno ga je integrirati (vključno z nekaj vrsticami v vašem testu in vse ostalo je poskrbljeno). V idealnem primeru pa morate v testih razmisliti o zunanjih odvisnostih, ne pa jih izvleči. Mogoče je še vedno izvedljiva izbira za scenarije, ko bi bilo treba obnašanje končnih točk preskusiti z minimalno obremenitvijo (uporabljamo ga za testiranje klicev v storitve Amazon AWS Services, kot je S3).

Vnesite adapterje

Adapterji delujejo odlično in spodbujajo premislek o API pogodbah in jasno določenih komunikacijskih mejah. Ta pristop še vedno uporabljamo, še posebej, če je Adapter bolj zapleten (kot je vtičnica JSON-RPC).

Tako lahko izgleda Adapter:

Toda za preproste končne točke HTTP se zdi, da so adapterji veliko dela in imajo veliko pomanjkljivost: knjižnice, ki jih porabijo, zapustijo iz enačbe za testiranje. Če se spremembe v knjižnicah HTTP ali JSON spremenijo, jih testi ne bodo ujeti. Količina proizvodno kritičnega kodeksa, ki ga ta pristop ne preveri, je nesprejemljiva.

Sedanjost in prihodnost

Bypass nam omogoča zagon zelo enostavnega spletnega strežnika v testih, ki simulirajo zunanje storitve, ki jih uporabljamo.

Zdaj lahko preizkusimo celoten sklad, vključno s knjižnico HTTP, knjižnico za kodiranje / dekodiranje JSON in mehanizmi za preverjanje pristnosti. Bypass README je dobro napisan, zato bom rezerviral podrobnosti izvajanja. Vendar pa rahlo spreminjamo, kako ga uporabljamo, da bi bili testi jedrnati in berljivi:

Prvič, včasih želimo poklicati na Facebook, ko se testi izvajajo kot popolna integracijska zbirka. To počnemo neredno, da zagotovimo delovanje API-ja za Facebook po naših pričakovanjih. Dodajanje - vključuje integracijo do test mešanja ne simulira API-ja, ampak kliče zunanjo storitev (vrstice 5, 7).

Izrecno smo, ko simuliramo zahteve za zunanje storitve, tako da mora vsak preskus, ki uporablja Bypass, imeti @tag facebook_bypass (vrstica 7).

Končno, handle_fb Funkcija (vrstice 30–39) se imenuje (glede na to, da request_path tekme). Všeč mi je ujemanje v funkcijski glavi, saj omogoča eksplicitno pot, na katero se odzivamo, in nam omogoča, da definiramo različne funkcije za različne poti.

Bypass poteka samo s testiranimi oznakami @tag: bypass in ko ne vodimo integracijskega paketa. Še nekaj, kar počnemo pri nastavitvi Bypass, je, da oznaki prenese ID strani (vrstice 8, 20). Torej, tukaj je, kako preizkus, ki uporablja Bypass, izgleda v vsem svojem sijaju:

Kot lahko vidite, facebook_bypass Oznaka označuje, da simuliramo API (razen če smo v načinu integracije). Omogoča nam posredovanje informacij simuliranemu API-ju in zelo enostavno je znova uporabiti isto konfiguracijo Bypass za različne teste.

Upam, da vam bo to pomagalo testirati zunanje API-je. Če imate dodatna vprašanja, me najdete na Twitterju (glej spodaj).

$config[ads_kvadrat] not found