Que faire lorsque vous vous perdez dans les tests dAPI?

(12 mai 2020)

Si vous nécrivez pas encore de tests, vous devriez commencer. Les tests amélioreront la qualité de votre code, réduiront les bogues et vous forceront probablement à réfléchir davantage à la conception et à la qualité. En fait, le plus dur est de commencer et de comprendre quel type de tests écrire.

Vous commencez donc à chercher sur Google et vous trouvez beaucoup de types de tests: unitaires, intégration, acceptation, fonctionnels, système, fumée, e2e… Certaines ressources indiqueront que vous devez avoir une couverture à 100\%, dautres diront quune couverture complète ne signifie pas que votre code est entièrement testé. Même lorsque vous décidez du type de tests à utiliser, il peut être difficile de décider comment tester une logique spécifique dans votre application.

Nabandonnez pas! Nous avons quelques conseils que nous avons appris en cours de route et nous espérons que cela vous facilitera la vie.

Nessayez pas de tout tester avec juste des tests fonctionnels

Cest lerreur numéro un les développeurs le font lors des tests. Donc, soyons clairs.

Les tests fonctionnels dans REST Api signifieraient envoyer une requête sur un point de terminaison et affirmer sa réponse. Si votre itinéraire comporte plusieurs cas différents dans lesquels la logique de domaine peut aller, vous devrez écrire un test distinct pour chaque cas pour vous assurer quils fonctionnent tous.

Cela pourrait même fonctionner sur une très petite application, mais comme dès que votre application se développera, cela deviendra très difficile à maintenir et ils seront très lents. À un moment donné, vous commencerez à perdre plus de temps sur la correction et la maintenance des tests que sur votre application. Ce nest pas ce que devraient être les tests. Nous lavons appris à la dure.

La pyramide de test

La pyramide de test est un graphique qui nous indique combien de tests vous devez écrire sur chaque couche.

Couches inférieures sont plus rapides et cest pourquoi nous devons couvrir autant que possible les tests unitaires et dintégration. Plus vous obtenez de haut niveau, moins vous devriez avoir de tests. Vous entendrez des noms différents pour les couches individuelles, mais la logique derrière eux est la même.

La pyramide de test

Tests unitaires

Commençons donc par le début – Tests unitaires. Voici une définition:

Le test unitaire est un niveau de test logiciel où les unités / composants individuels dun logiciel sont testés. Le but est de valider que chaque unité distincte du logiciel fonctionne comme prévu. Une unité est la plus petite partie testable de tout logiciel.

Cela signifie que vous devez tester chaque méthode séparément et vous moquer de toutes les autres méthodes.

Ce nest pas les tests unitaires, cest vous!

Les tests unitaires ne sont pas seulement bons pour vous assurer que votre code fonctionne, mais ils vous feront également refactoriser. Ils devraient être faciles à écrire. Si vous avez du mal à tester un morceau de code particulier, cela signifie que votre code est mal écrit et quil doit être remanié. Les principes SOLID vous aideront ici. SOLID est un ensemble de principes de conception permettant décrire un code propre, élégant et lisible. Si vous écrivez du code solide, les tests unitaires seront un jeu denfant.

Donc, fondamentalement, avec les tests unitaires, vous vous assurez que chaque méthode isolée de votre code fonctionne comme il se doit. Cela signifierait que tout le code fonctionne comme prévu, non? Pas vraiment. Vous devez également vous assurer que les composants individuels fonctionnent correctement ensemble. Et cest là que viennent les tests dintégration.

Tests dintégration

Le test dintégration est la phase de test logiciel au cours de laquelle des modules logiciels individuels sont combinés et testés en groupe.

Un bon exemple lorsque le test unitaire ne suffit pas est la requête de base de données constructeurs. Dans les tests unitaires, vous pouvez vous assurer que vous avez appelé les conditions souhaitées dans la requête, mais si votre requête est plus compliquée, vous ne pouvez pas vraiment être sûr que les conditions que vous avez utilisées renverront le résultat attendu tant que vous n’effectuerez pas un appel réel à la base de données. Cest donc là que le test dintégration qui exécute la requête sur une base de données de test et affirme les résultats attendus devrait venir.

Cas où vous avez besoin de tests dintégration:

  • Vérification de lintégration correcte avec 3rd bibliothèques ou API tierces
  • Vérification de deux ou plusieurs modules qui ont des tests unitaires fonctionnent comme prévu ensemble

Tests fonctionnels

Le test fonctionnel est défini comme le test de la fonctionnalité complète dune application.

Ils sont beaucoup plus simples à écrire en API par rapport à une application avec une interface utilisateur. Les tests fonctionnels pour lAPI doivent consister à envoyer des requêtes réelles aux points de terminaison dAPI et à valider le format de réponse. Vous devez tester chaque route pour une réponse réussie et une erreur.

Mais ne le faites pas trop, vous navez pas besoin dun test pour chaque erreur possible. Cela devrait déjà être couvert par des tests unitaires et dintégration.Ici, vous voulez simplement vous assurer que votre itinéraire renvoie un format de réponse correct pour une erreur. Si vos routes ont des rôles différents, vous devez également tester la réponse aux erreurs de sécurité.

Voici quelques outils utiles pour rendre vos tests fonctionnels plus faciles à écrire:

  • PHP Matcher – Bibliothèque qui vous permet de comparer votre réponse à des modèles. Vous pouvez définir le modèle que vous attendez pour chaque champ de votre réponse, au lieu daffirmer des valeurs réelles dans votre base de données. De cette façon, vous pouvez tester uniquement le format de réponse et les types de champs sans vous soucier si une chaîne ou un nombre a changé dans votre base de données de test.
  • Tests Postman – vous pouvez écrire vos tests fonctionnels dans Postman, ce qui est assez utile pour léquipe frontend, ils pourront vérifier et essayez vos points de terminaison API. Ce sera comme une documentation API interactive. Vous pouvez intégrer des tests Postman avec Newman – un exécuteur de ligne de commande qui vous permet dexécuter des tests en ligne de commande et de les intégrer dans Intégration continue (CI) .
  • Faker – bibliothèque pour générer de fausses données pour votre base de données de test

Aller plus loin

Maintenant que vous savez que votre code fonctionne, vous pouvez vérifier ses performances.

Test de charge

Le test de charge vérifie si votre API répond comme prévu à divers serveurs.

Stress testing

Vérifier si lAPI fonctionne comme prévu lors de la réception dun grand nombre de requêtes en même temps.

Dois-je avoir une couverture à 100\%?

Une couverture à 100\% ne garantit pas que votre code est entièrement testé et fonctionnel. Cela signifie uniquement que les tests ont utilisé chaque ligne de votre code, mais cela aide certainement à exécuter la couverture de code pour voir si vous avez manqué de couvrir certaines parties de votre code.

Nous avons appris que nous ne bénéficions pas de lécriture teste des méthodes simples comme getters et setters. Ils prennent du temps à écrire et à maintenir, en particulier sur les grands projets.

Bien que les tests éliminent la plupart des bogues potentiels, il y aura toujours des cas extrêmes auxquels vous n’avez pas pensé. Si un bogue apparaît, assurez-vous de le reproduire dabord avec de nouveaux tests, puis corrigez votre code. De cette façon, votre couverture saméliorera et vous serez sûr davoir couvert ce cas. Cela peut également être un excellent moyen de commencer à couvrir vos anciens projets qui nont pas encore été testés.

Voici quelques outils utiles pour vérifier la qualité de votre code et de vos tests:

  • Infection – outil de test de mutation. Les tests de mutation évaluent la qualité des tests existants. Les tests de mutation modifient un programme de manière modeste et sattendent à ce que vos tests échouent, ce qui signifie que le mutant sera tué. Pour chaque test réussi, le mutant reste en vie. Les suites de tests sont mesurées par le pourcentage de mutants quelles tuent. Les tests de mutation fournissent un critère de test appelé Mutation Score Indicator (MSI) . Le MSI mesure lefficacité dun ensemble de test en termes de sa capacité à détecter les défauts. Vous pouvez également lintégrer à CI et définir le MSI minimum requis pour que CI réussisse.
  • PHPStan – PHPStan se concentre sur la recherche derreurs dans votre code sans lexécuter. Il détecte des classes entières de bogues avant même que vous nécriviez des tests pour le code. Cela rapproche PHP des langages compilés en ce sens que lexactitude de chaque ligne du code peut être vérifiée avant dexécuter la ligne réelle.
  • Intégration continue (CI) – vous permet dexécuter vos tests sur git à chaque commit. Cela vous évitera de fusionner des PR avec des tests qui échouent.

Conclusion

Il est facile de se perdre dans tout ce que vous trouvez sur l’écriture des tests. Lobjectif principal des tests doit être de sassurer que votre code fonctionne et quil est facile à maintenir. Si vous êtes nouveau dans les tests, cela peut sembler prendre trop de temps, mais nabandonnez pas, une fois que vous en aurez pris la main, cela rendra votre vie de codage beaucoup plus facile et plus rapide. 🙂

Cette pièce créative a été initialement publiée sur Locastic.com – https://locastic.com/blog/what-to-do-when- vous-vous-perdez-dans-les-tests-api /

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *