A continuació s’explica com es prova l’API extern a l’elixir amb derivació

$config[ads_kvadrat] not found

Continua CI in 3 minutes.

Continua CI in 3 minutes.

Taula de continguts:

Anonim

Prioritzem els principis d’arquitectura orientada a serveis a Invers. Això vol dir que comptem amb components petits i sostenibles amb responsabilitats clarament definides. Es comuniquen entre si (principalment), a través d’APIs de transferència estatal de representació o REST.

Això proporciona flexibilitat i ens ha servit bé, a excepció d’una faceta significativa: les proves. En provar, cal evitar:

  • Dependència dels serveis externs que s'executen a la mateixa màquina.
  • Proves lentes.

Com que les aplicacions es basen inherentment en serveis externs, és fonamental tenir una estratègia de proves per a aquestes dependències.

Recentment hem començat a utilitzar Bypass i us explicaré com vam arribar allà i, concretament, com ho estem utilitzant.

El passat

Mock metodi i retorna alguns exemples de dades com aquesta:

Va ser (i crec que encara ho és) la "manera d’anar" al món de Ruby / Rails. Malauradament, això fa que José Valim ens expliqui el mal comportament descrit aquí.

Després vam començar a utilitzar ExVCR, que és una gran biblioteca, però té inconvenients similars com a simulacres: es fomenta la mandra i no fomenta la separació de les preocupacions que són fonamentals per a les APIs ben definides. ExVCR permet "gravar" i "reproduir" dades reals. És molt fàcil d’integrar (incloent algunes línies de la prova i tot el que s’encarrega). Però, idealment, heu de pensar en les dependències externes en les proves, no extreureu-les. Encara podria ser una opció viable per als escenaris en què el comportament del punt final s’hauria de provar amb un cost mínim (l’utilitzem per provar trucades als serveis AWS d’Amazon com S3).

Introduïu adaptadors

Els adaptadors funcionen molt bé i promouen la deliberació sobre els contractes de l'API i els límits de comunicació clarament definits. Encara utilitzem aquest enfocament, especialment quan l'adaptador és més complex (com un sòcol JSON-RPC).

Així pot semblar un adaptador:

Però per a punts finals HTTP simples, els adaptadors semblen molta feina i tenen un inconvenient important: deixen les biblioteques que consumeixen fora de l’equació de prova. Si canvia alguna cosa a les biblioteques HTTP o JSON, les proves no el captaran. La quantitat de codi crític de producció que no es comprova amb aquest enfocament és inacceptable.

El present i el futur

Bypass ens permet iniciar un servidor web molt senzill en proves que simulen serveis externs que utilitzem.

Ara, podem provar tota la pila, incloent la biblioteca HTTP, la biblioteca de codificació / descodificació de JSON i els mecanismes d’autenticació. El bypass README està ben escrit, per la qual cosa perdonaré els detalls de la implementació. No obstant això, fem canviar lleugerament la manera d’utilitzar-lo per mantenir les proves de manera concisa i llegible:

En primer lloc, de vegades volem trucar a Facebook quan les proves s’executen com a suite d’integració completa. Ho fem de forma irregular per garantir que l'API de Facebook encara funcioni segons les nostres expectatives. S'està afegint - Inclouen la integració a prova de barreja no simula l'API, però, en canvi, truca al servei extern (línies 5 i 7).

Estem explícits quan simularem sol·licituds a serveis externs de manera que cada prova que utilitzi Bypass hagi de tenir la @tag facebook_bypass (línia 7).

Finalment, el handle_fb es diu la funció (línies 30–39) (atès que el request_path partits). M'agrada coincidir en el cap de la funció, ja que fa explícit el camí al qual estem reaccionant i ens permet definir diferents funcions per a diferents camins.

Per tant, Bypass funciona només amb proves marcades amb @tag: bypass i quan no estem executant la nostra suite d’integració. Una altra cosa que fem mentre es configura el Bypass és permetre que l’etiqueta passi a un identificador de pàgina (línies 8, 20). Així doncs, aquí teniu una prova que utilitza Bypass en tota la seva glòria:

Com podeu veure, el facebook_bypass L'etiqueta fa explícit que estem simulant l'API (tret que estiguem en mode integració). Ens permet passar informació a l’API simulada i és molt fàcil reutilitzar la mateixa configuració de bypass per a diferents proves.

Espero que això ajudi a provar API externes. Podeu trobar-me a Twitter (vegeu més avall) si teniu més preguntes.

$config[ads_kvadrat] not found