Cosa fare quando ti perdi nei test API?

Pubblicato il

(12 maggio 2020)

Se tu non stai ancora scrivendo test, dovresti iniziare. I test miglioreranno la qualità del tuo codice, ridurranno i bug e probabilmente ti costringeranno a pensare di più al design e alla qualità. In realtà, la cosa più difficile è iniziare e capire che tipo di test scrivere.

Quindi inizi a cercare su Google e trovi molti tipi di test: unità, integrazione, accettazione, funzionale, sistema, fumo, e2e… Alcune risorse diranno che devi avere una copertura del 100\%, altre diranno che la copertura completa non significa che il tuo codice sia completamente testato. Anche quando decidi che tipo di test utilizzare, può essere difficile decidere come testare una logica specifica nella tua app.

Non arrenderti! Abbiamo alcuni suggerimenti che abbiamo imparato lungo la strada e speriamo che ti semplificherà la vita.

Non provare a testare tutto solo con test funzionali

Questo è lerrore numero uno gli sviluppatori fanno in testing. Quindi chiariamo prima questo.

I test funzionali in REST Api significherebbero inviare una richiesta su un endpoint e affermare la sua risposta. Se il tuo percorso ha più casi diversi in cui può andare la logica del dominio, dovresti scrivere test separati per ogni caso per assicurarti che funzionino tutti.

Questo potrebbe funzionare anche su unapp molto piccola, ma come non appena la tua app cresce, diventerà molto difficile da mantenere e saranno molto lente. Ad un certo punto inizierai a perdere più tempo a riparare e mantenere i test che a lavorare effettivamente sulla tua app. Non è questo che dovrebbero riguardare i test. Labbiamo imparato nel modo più duro.

La piramide del test

La piramide del test è un grafico che ci dice quanto test dovresti scrivere su ogni livello.

Livelli inferiori sono più veloci ed è per questo che dobbiamo coprire il più possibile con unit e test di integrazione. Più alto livello ottieni, meno test dovresti avere. Sentirai nomi diversi per i singoli livelli, ma la logica dietro di essi è la stessa.

La piramide del test

Test unitari

Quindi partiamo dallinizio: i test unitari. Ecco una definizione:

Il test unitario è un livello di test del software in cui vengono testati i singoli componenti / unità di un software. Lo scopo è convalidare che ciascuna unità separata del software funzioni come previsto. Ununità è la parte testabile più piccola di qualsiasi software.

Ciò significa che dovresti testare ogni metodo isolatamente e deridere tutti gli altri metodi.

Non lo è test unitari, sei tu!

I test unitari non sono solo utili per assicurarti che il tuo codice funzioni, ma ti faranno anche fare un po di refactoring. Dovrebbero essere facili da scrivere. Se hai difficoltà a testare un particolare pezzo di codice, significa che il tuo codice è scritto male e dovrebbe essere refactored. I principi SOLID ti aiuteranno qui. SOLID è un insieme di principi di progettazione per scrivere codice pulito, elegante e leggibile. Se scrivi codice solido, i test unitari saranno un gioco da ragazzi.

Quindi, in pratica, con i test unitari ti assicuri che ogni metodo isolato nel tuo codice funzioni come dovrebbe. Ciò significherebbe che tutto il codice funziona come previsto, giusto? Non proprio. È inoltre necessario assicurarsi che i singoli componenti funzionino correttamente insieme. Ed è qui che arrivano i test di integrazione.

Test di integrazione

Il test di integrazione è la fase del test del software in cui i singoli moduli software vengono combinati e testati come un gruppo.

Un buon esempio quando il test unitario non è sufficiente è la query del database costruttori. Negli unit test puoi assicurarti di aver chiamato le condizioni che desideri nella query, ma se la tua query è più complicata, non puoi davvero essere sicuro che le condizioni che hai usato restituiranno il risultato previsto finché non effettui una chiamata effettiva al database. Quindi è qui che dovrebbe arrivare il test di integrazione che esegue la query su un database di test e afferma che i risultati attesi dovrebbero venire.

Casi in cui sono necessari test di integrazione:

  • Verifica della corretta integrazione con il terzo librerie o API di terze parti
  • Verifica di due o più moduli con unit test che funzionano insieme come previsto

Test funzionali

Il test funzionale è definito come il test della funzionalità completa di alcune applicazioni.

Sono molto più semplici da scrivere nellAPI rispetto a unapplicazione con uninterfaccia utente. I test funzionali per lAPI dovrebbero consistere nellinvio di richieste effettive agli endpoint API e nella convalida del formato di risposta. Dovresti testare ogni percorso per ottenere una risposta positiva ed errata.

Ma non esagerare, non hai bisogno di un test per ogni possibile errore. Questo dovrebbe già essere coperto da test unitari e di integrazione.Qui vuoi solo assicurarti che il tuo percorso restituisca il formato di risposta corretto per un errore. Se le tue rotte hanno ruoli diversi, dovresti anche testare la risposta agli errori di sicurezza.

Ecco alcuni strumenti utili per rendere i tuoi test funzionali più facili da scrivere:

  • PHP Matcher : libreria che ti consente di controllare la tua risposta rispetto ai pattern. Puoi impostare quale modello ti aspetti per ogni campo nella tua risposta, invece di affermare valori reali nel tuo database. In questo modo puoi testare solo il formato della risposta e i tipi di campo senza preoccuparti se qualche stringa o numero è cambiato nel database di prova.
  • Postman tests – puoi scrivere i tuoi test funzionali in Postman che è molto utile per il team di frontend, saranno in grado di controllare e prova i tuoi endpoint API. Sarà come una documentazione API interattiva. Puoi integrare i test Postman con Newman , un programma di esecuzione della riga di comando che ti consente di eseguire i test nella riga di comando e integrarli in Integrazione continua (CI) .
  • Faker – libreria per la generazione di dati falsi per il database di test

Fare un passo avanti

Ora che sai che il tuo codice funziona, puoi verificarne le prestazioni.

Test di carico

Il test di carico controlla se la tua API risponde come previsto a vari server.

Stress testing

Verificare se lAPI funziona come previsto quando si ricevono un numero elevato di richieste contemporaneamente.

Devo avere una copertura del 100\%?

Una copertura del 100\% non garantisce che il tuo codice sia completamente testato e funzionante. Ciò significa solo che i test hanno utilizzato ogni riga del tuo codice, ma sicuramente aiuta a eseguire la copertura del codice per vedere se ti sei perso a coprire alcune parti del tuo codice.

Abbiamo imparato che non traiamo vantaggio dalla scrittura verifica metodi semplici come getter e setter. Richiedono tempo per scrivere e mantenere, soprattutto su grandi progetti.

Sebbene i test eliminino la maggior parte dei potenziali bug, ci saranno ancora alcuni casi limite a cui non avevi pensato. Se viene visualizzato un bug, assicurati di riprodurlo prima con nuovi test, quindi correggi il codice. In questo modo la tua copertura migliorerà e sarai sicuro di aver coperto quel caso. Questo può anche essere un ottimo modo per iniziare a coprire i tuoi progetti precedenti che non hanno ancora test.

Ecco alcuni strumenti utili per controllare la qualità del codice e dei test:

  • Infezione : strumento per test di mutazione. Il test di mutazione valuta la qualità dei test esistenti. Il test di mutazione modifica un programma in piccoli modi e si aspetta che i test falliscano, il che significa che il mutante verrà ucciso. Per ogni test superato, il mutante rimane in vita. Le suite di test sono misurate dalla percentuale di mutanti che uccidono. Il test di mutazione fornisce un criterio di test chiamato Mutation Score Indicator (MSI) . LMSI misura lefficacia di un set di test in termini di capacità di rilevare i guasti. Puoi anche integrarlo in CI e impostare lMSI minimo richiesto per il passaggio di CI.
  • PHPStan – PHPStan si concentra sulla ricerca di errori nel codice senza eseguirlo effettivamente. Rileva intere classi di bug anche prima di scrivere test per il codice. Avvicina PHP ai linguaggi compilati, nel senso che la correttezza di ogni riga del codice può essere verificata prima di eseguire la riga effettiva.
  • Integrazione continua (CI) : ti consente di eseguire i test su git su ogni commit. Ti impedirà di unire PR-s con test non riusciti.

Conclusione

È facile perdersi in tutte le cose che trovi sulla scrittura di test. Lobiettivo principale del test dovrebbe essere assicurarsi che il codice funzioni e sia facile da mantenere. Se sei nuovo ai test, potrebbe sembrare che impieghino troppo tempo, ma non arrenderti, una volta che lo avrai acquisito, renderà la tua vita di codifica molto più facile e veloce. 🙂

Questo pezzo creativo è stato originariamente pubblicato su Locastic.com – https://locastic.com/blog/what-to-do-when- ti-perdi-in-api-testing /

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *