Ce trebuie să faceți când vă pierdeți în testarea API?

(12 mai 2020)

nu scrieți încă teste, ar trebui să începeți. Testele vor îmbunătăți calitatea codului dvs., vor reduce bug-urile și probabil vă vor obliga să vă gândiți mai mult la design și calitate. De fapt, cel mai greu este să începeți și să aflați ce tip de teste să scrieți.

Deci, începeți să căutați Google și găsiți o mulțime de tipuri de teste: unitate, integrare, acceptare, funcțional, sistem, fum, e2e … Unele resurse vor spune că trebuie să aveți o acoperire de 100\%, altele vor spune că acoperirea completă nu înseamnă că codul dvs. este testat complet. Chiar și atunci când decideți ce tip de teste să utilizați, poate fi greu să decideți cum să testați o anumită logică din aplicația dvs.

Nu renunțați! Avem câteva sfaturi pe care le-am învățat pe parcurs și sperăm că vă va ușura viața.

Nu încercați să testați totul doar cu teste funcționale

Aceasta este greșeala numărul unu dezvoltatorii fac în testare. Deci, să clarificăm acest lucru mai întâi.

Testele funcționale în REST Api ar însemna trimiterea unei cereri pe un punct final și afirmarea răspunsului acesteia. Dacă ruta dvs. are mai multe cazuri diferite în care poate merge logica domeniului, ar trebui să scrieți test separat pentru fiecare caz pentru a vă asigura că toate funcționează.

Acest lucru ar putea funcționa chiar și pe o aplicație foarte mică, dar ca imediat ce aplicația dvs. crește, acest lucru va deveni foarte greu de întreținut și vor fi foarte lente. La un moment dat, veți începe să pierdeți mai mult timp la remedierea și menținerea testelor decât să lucrați efectiv la aplicația dvs. Nu despre asta ar trebui să fie testele. Am aflat că este dificil.

Piramida de testare

Piramida de testare este un grafic care ne spune cât de mult ar trebui să scrieți testarea pe fiecare strat.

Straturile inferioare sunt mai rapide și de aceea trebuie să acoperim cât mai mult posibil testele de unitate și de integrare. Cu cât obțineți un nivel mai ridicat, cu atât ar trebui să aveți mai puține teste. Veți auzi denumiri diferite pentru straturi individuale, dar logica din spatele lor este aceeași.

Piramida de testare

Testele unitare

Deci, să începem de la început – Testele unitare. Iată o definiție:

Testarea unității este un nivel de testare software în care sunt testate unități individuale / componente ale unui software. Scopul este de a valida faptul că fiecare unitate separată a software-ului funcționează conform așteptărilor. O unitate este cea mai mică parte testabilă a oricărui software.

Aceasta înseamnă că ar trebui să testați fiecare metodă izolat și să bateți în joc toate celelalte metode.

Nu este teste unitare, ești tu!

Testele unitare nu sunt doar bune pentru a te asigura că funcționează codul tău, dar te va face și să refaci ceva. Ar trebui să fie ușor de scris. Dacă te lupți cu testarea unei anumite bucăți de cod, înseamnă că codul tău este scris greșit și ar trebui refactorizat. Principiile SOLID vă vor ajuta aici. SOLID este un set de principii de proiectare pentru scrierea unui cod curat, elegant și lizibil. Dacă scrieți cod solid, testele unitare vor fi o bucată de prăjitură.

Deci, practic, cu testele unitare vă asigurați că fiecare metodă izolată din codul dvs. funcționează așa cum ar trebui. Asta ar însemna că toate codurile funcționează așa cum era de așteptat, nu? Nu chiar. De asemenea, trebuie să vă asigurați că componentele individuale funcționează bine împreună. Și acolo apar testele de integrare.

Testele de integrare

Testarea integrării este faza în testarea software în care modulele software individuale sunt combinate și testate ca grup.

Un bun exemplu atunci când testul unitar nu este suficient este interogarea bazei de date constructori. În testele unitare vă puteți asigura că ați apelat condițiile pe care le doriți în interogare, dar dacă interogarea dvs. este mai complicată, nu puteți fi sigur că condițiile pe care le-ați folosit vor întoarce rezultatul așteptat până când nu efectuați un apel efectiv la baza de date. Așadar, aici ar trebui să apară testul de integrare care execută interogarea într-o bază de date de testare și afirmă rezultatele așteptate.

Cazurile în care aveți nevoie de teste de integrare:

  • Verificarea integrării corecte cu a treia bibliotecile de petreceri sau API-urile
  • Verificarea a două sau mai multe module care au teste unitare funcționează așa cum se aștepta

Testele funcționale

Testarea funcțională este definită ca testarea funcționalității complete a unor aplicații.

Sunt mult mai simple de scris în API comparativ cu o aplicație cu o interfață cu utilizatorul. Testele funcționale pentru API ar trebui să conste în trimiterea de cereri efective către punctele finale API și validarea formatului de răspuns. Ar trebui să testați fiecare rută pentru a răspunde cu succes la erori.

Dar nu o faceți prea mult, nu aveți nevoie de un test pentru fiecare posibilă eroare. Acest lucru ar trebui să fie deja acoperit de testele de unitate și de integrare.Aici doriți doar să vă asigurați că ruta dvs. returnează formatul de răspuns corect pentru o eroare. Dacă rutele dvs. au roluri diferite, ar trebui să testați și răspunsul la erori de securitate.

Iată câteva instrumente utile pentru a vă ușura scrierea testelor funcționale:

  • PHP Matcher – Biblioteca care vă permite să verificați răspunsul în raport cu tiparele. Puteți seta ce model așteptați pentru fiecare câmp din răspunsul dvs., în loc să afirmați valori reale în baza de date. În acest fel, puteți testa numai formatul de răspuns și tipurile de câmpuri fără să vă faceți griji dacă s-au modificat unele șiruri sau un număr din baza de date de testare.
  • Testele Postman – puteți scrie testele funcționale în Postman, care este destul de util pentru echipa frontend, ei vor putea verifica și încercați obiectivele API. Va fi ca documentația interactivă API. Puteți integra testele Postman cu Newman – alergător de linie de comandă care vă permite să rulați teste în linia de comandă și să le integrați în Integrare continuă (CI) .
  • Faker – bibliotecă pentru generarea de date false pentru baza de date de testare

Mergeți cu un pas mai departe

Acum că știți că funcționează codul dvs., îi puteți verifica performanța.

Testarea încărcării

Testarea încărcării verifică dacă API-ul dvs. răspunde după cum era de așteptat la diferite servere.

Testarea stresului

Verificarea dacă API funcționează conform așteptărilor atunci când primiți un număr mare de solicitări în același timp.

Trebuie să am o acoperire de 100\%?

Acoperirea de 100\% nu garantează că codul dvs. este complet testat și funcțional. Aceasta înseamnă doar teste care au folosit fiecare linie a codului dvs., dar vă ajută cu siguranță să rulați acoperirea codului pentru a vedea dacă ați ratat să acoperiți anumite părți ale codului dvs.

Am aflat că nu beneficiem de scriere teste pentru metode simple, cum ar fi getters și seters. Au nevoie de timp pentru a scrie și întreține, mai ales pentru proiecte mari.

În timp ce testele vor elimina majoritatea bug-urilor potențiale, vor exista totuși câteva cazuri marginale la care nu v-ați gândit. Dacă apare o eroare, asigurați-vă că o reproduceți mai întâi cu noi teste, apoi remediați codul. În acest fel, acoperirea dvs. se va îmbunătăți și veți fi sigur că ați acoperit cazul respectiv. Aceasta poate fi, de asemenea, o modalitate excelentă de a începe să vă acoperiți proiectele vechi care nu au încă teste.

Iată câteva instrumente utile pentru verificarea calității codului și testelor:

  • Infecție – instrument pentru testarea mutației. Testarea mutației evaluează calitatea testelor existente. Testarea mutației modifică un program într-un mod mic și se așteaptă ca testele dvs. să eșueze, ceea ce înseamnă că mutantul va fi ucis. Pentru fiecare test trecut, mutantul rămâne în viață. Suitele de testare sunt măsurate prin procentul de mutanți pe care îi ucid. Testarea mutației oferă un criteriu de testare numit Mutation Score Indicator (MSI) . MSI măsoară eficiența unui set de test în ceea ce privește capacitatea sa de a detecta defecțiuni. De asemenea, îl puteți integra în CI și setați MSI minim necesar pentru ca CI să treacă.
  • PHPStan – PHPStan se concentrează pe găsirea erorilor în codul dvs. fără a-l rula efectiv. Prinde clase întregi de bug-uri chiar înainte de a scrie teste pentru cod. Mută ​​PHP mai aproape de limbile compilate în sensul că corectitudinea fiecărei linii a codului poate fi verificată înainte de a rula linia reală.
  • Integrare continuă (CI) – vă permite să rulați testele pe git la fiecare commit. Vă va împiedica să îmbinați PR-urile cu testele eșuate.

Concluzie

Este ușor să vă pierdeți în toate lucrurile pe care le găsiți despre scrierea testelor. Scopul principal al testării ar trebui să fie asigurarea faptului că codul dvs. funcționează și că este ușor de întreținut. Dacă sunteți nou în ceea ce privește testarea, s-ar putea să pară că durează prea mult timp, dar nu renunțați, odată ce ați luat-o, vă va face viața de codare mult mai ușoară și mai rapidă. 🙂

Această piesă creativă a fost inițial postată pe Locastic.com – https://locastic.com/blog/what-to-do-when- te-pierzi-în-testarea-api /

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *