49 votes

Comment tester unitairement votre API ?

J'en suis au point où je dois écrire des tests unitaires pour une API REST écrite avec CakePHP 1.3. L'API prend en charge les requêtes GET, POST et PUT pour l'interrogation et la manipulation des données.

Existe-t-il un moyen établi de tester l'entrée/sortie correcte d'une API en simulant une requête HTTP, à l'aide de fixtures ? Je ne veux pas exécuter de requêtes POST/PUT réelles sur la base de données en direct (dev). Comment puis-je simuler au mieux le système pour utiliser des modèles temporaires, tout en testant le reste de la pile telle quelle ?


Tester les requêtes GET est assez facile avec tests de contrôle . Toutefois, pour la manipulation des données, l'API utilise assez largement les en-têtes HTTP et analyse également les données POST/PUT brutes XML et JSON. Les méthodes de test unitaire du contrôleur ne simulent que les données POST en définissant le paramètre $this->data dans le contrôleur, ce qui ne me permet pas de tester correctement l'API.

7voto

Teoman shipahi Points 7988

Vous devez créer des Mocks ou utiliser le cadre d'isolation afin de simuler l'environnement API. Les tests unitaires ne doivent pas dépendre de ressources telles que les connexions Internet, le réseau, les points de terminaison, etc.

Si vous avez l'intention de tester des appels d'API réels, vous devez créer un projet de test d'intégration et l'utiliser à cette fin. Mais attention, les tests d'intégration ne sont généralement pas reproductibles et vous obtiendrez des résultats différents à chaque exécution.

5voto

Craig Trader Points 8924

Je vous recommande de commencer par une petite recherche. Ces articles devraient vous aider :

3voto

Don Kirkby Points 12671

Il semble que vous puissiez tester les données brutes XML PUT et POST sans trop de difficultés. La documentation REST de CakePHP dit ceci :

Si une demande POST ou PUT a un type de contenu XML, l'entrée est prise et passée à une instance de l'objet Xml de Cake, qui est assignée à la propriété $data du contrôleur. Grâce à cette fonctionnalité, la gestion des données XML et POST en parallèle est transparente : aucune modification n'est requise dans le code du contrôleur ou du modèle. Tout ce dont vous avez besoin devrait se retrouver dans $this->data.

Essayez de parcourir le code de votre contrôleur en mode débogage pour voir ce qui entre réellement dans le système. $this->data lors d'une requête XML.

Pour ce qui est d'éviter la base de données en direct, une base de données SQLite en mémoire serait-elle plus facile ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X