Lūk, kā testi ārējās API Elixir ar apvedceļu

$config[ads_kvadrat] not found

Best Practice For API Design in Elixir - Part 1 | Erlang Solutions Webinar

Best Practice For API Design in Elixir - Part 1 | Erlang Solutions Webinar

Satura rādītājs:

Anonim

Mēs prioritāti piešķiram uz pakalpojumu orientētas arhitektūras principiem Apgrieztā. Tas nozīmē, ka mums ir mazi, uzturami komponenti ar skaidri definētiem pienākumiem. Viņi sazinās viens ar otru (galvenokārt), izmantojot reprezentatīvo valsts pārsūtīšanu vai REST, API.

Tas nodrošina elastību un ir labi kalpojis, izņemot vienu būtisku aspektu: testēšana. Veicot testēšanu, jāizvairās no:

  • Atkarība no ārējiem pakalpojumiem, kas darbojas tajā pašā iekārtā.
  • Lēni testi.

Tā kā lietojumprogrammas pēc būtības ir atkarīgas no ārējiem pakalpojumiem, ir ļoti svarīgi, lai šīm atkarībām tiktu ieviesta testēšanas stratēģija.

Nesen mēs sākām lietot apvedceļu, un es paskaidrošu, kā mēs tur nonācām un īpaši, kā mēs to izmantojam.

Pagātne

Izmetiet metodes un atgrieziet dažus piemērus, piemēram:

Tas bija (un es uzskatu, ka joprojām ir) „ceļš” Ruby / Rails pasaulē. Diemžēl tas veicina sliktu uzvedību, kā to vislabāk paskaidroja José Valim.

Pēc tam mēs sākām izmantot ExVCR, kas ir lieliska bibliotēka, taču tam ir līdzīgi trūkumi kā mock / stubs: tas veicina slinkumu un neveicina tādu problēmu nošķiršanu, kas ir ļoti svarīgas labi definētām API. ExVCR ļauj ierakstīt un atskaņot reāllaika datus. Tas ir ļoti viegli integrēt (ieskaitot dažas rindas savā testā, un viss pārējais tiek aprūpēts). Bet ideālā gadījumā jums ir jādomā par ārējām atkarībām testos, nevis jāizmanto abstrakti. Tas varētu būt dzīvotspējīga izvēle scenārijiem, kad parametru uzvedība ir jāpārbauda ar minimālu pieskaitāmību (mēs to izmantojam, lai pārbaudītu zvanus uz Amazon AWS pakalpojumiem, piemēram, S3).

Ievadiet adapterus

Adapteri darbojas lieliski un veicina apspriedes par API līgumiem un skaidri definētām sakaru robežām. Mēs joprojām izmantojam šo pieeju, īpaši, ja Adapteris ir sarežģītāks (piemēram, JSON-RPC ligzda).

Šādā veidā Adapteris var izskatīties:

Bet vienkāršiem HTTP galapunktiem Adapteri šķiet daudz darba un tiem ir liels trūkums: viņi atstāj bibliotēkas, kuras tās patērē, no testēšanas vienādojuma. Ja kaut kas mainās HTTP vai JSON bibliotēkās, testi netiks uztverti. Nepieņemams ir ražošanas kritiskā koda daudzums, kas nav pārbaudīts ar šo pieeju.

Pašreizējā un nākotne

Apvedceļš ļauj mums sākt ļoti vienkāršu tīmekļa serveri testos, kas imitē mūsu izmantotos ārējos pakalpojumus.

Tagad mēs varam pārbaudīt visu kaudzi, ieskaitot HTTP bibliotēku, JSON kodēšanas / dekodēšanas bibliotēku un autentifikācijas mehānismus. Apvedceļš README ir labi uzrakstīts, tāpēc es ietaupīšu īstenošanas informāciju. Tomēr mēs nedaudz mainām to, kā mēs to izmantojam, lai veiktu testus kodolīgus un lasāmus:

Pirmkārt, mēs dažkārt gribam izsaukt Facebook, kad testi tiek veikti kā pilnīgs integrācijas komplekts. Mēs to darām neregulāri, lai nodrošinātu, ka Facebook API joprojām darbojas atbilstoši mūsu cerībām. Pievienošana - iekļaut integrāciju uz maisījuma pārbaude neimulē API, bet tā vietā aicina ārējo pakalpojumu (5., 7. rinda).

Mēs esam skaidri norādīti, kad mēs simulējam pieprasījumus uz ārējiem pakalpojumiem, lai katram testam, kas izmanto apvedceļu, būtu jābūt @tag facebook_bypass (7. rinda).

Visbeidzot, handle_fb (līnija 30–39) tiek aicināta (ņemot vērā, ka request_path spēles). Man patīk saskaņot funkciju galvā, jo tas skaidri nosaka, kuru ceļu mēs reaģējam, un ļauj mums definēt dažādas funkcijas dažādiem ceļiem.

Tātad Bypass darbojas tikai ar testiem, kas atzīmēti ar @tag: apvedceļš un kad mēs nedarbojam mūsu integrācijas komplektu. Vēl viena lieta, ko mēs darām, izveidojot apvedceļu, ļauj atzīmei nodot lapas ID (8., 20. rinda). Tātad šeit ir pārbaudījums, kas izmanto apvedceļu visā tās krāšņumā:

Kā redzat, facebook_bypass tag skaidri norāda, ka mēs simulējam API (ja vien mēs neesam integrācijas režīmā). Tas ļauj mums nodot informāciju simulētajai API, un tas ir ļoti viegli atkārtoti izmantot to pašu apvedceļa konfigurāciju dažādiem testiem.

Es ceru, ka tas palīdzēs pārbaudīt ārējās API. Jūs varat atrast mani čivināt (skat. Tālāk), ja jums ir kādi jautājumi.

$config[ads_kvadrat] not found