web-dev-qa-db-fra.com

Comment tester votre API?

Je suis au point où j'ai besoin d'écrire des tests d'unité pour une API REST écrite à l'aide de CakePHP 1.3. L'API prend en charge l'obtention, POST et mettez des demandes d'interrogation et de manipulation de données.

Existe-t-il un moyen établi de tester la bonne entrée/sortie d'une API simulant une requête HTTP, à l'aide de ? Je ne veux pas exécuter les demandes post-post/mettre en œuvre contre la base de données Live (Dev). Comment puis-je me moquer du mieux le système pour utiliser des modèles temporaires, mais tester le reste de la pile comme?


Test des demandes d'accès est suffisamment facile avec Tests de contrôleur . Toutefois, pour la manipulation de données, l'API utilise des en-têtes HTTP de manière assez approfondie et analyse également les données Publier XML et JSON RAW. Les méthodes de test de l'unité de contrôleur uniquement simulées POST DATA en réglant $this->data Dans le contrôleur, ce qui ne me permet pas de tester correctement l'API.

49
deceze
5
Craig Trader

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

Si vous souhaitez tester des appels d'API réels, vous devez créer un projet d'intégration et l'utiliser à cet effet. Mais soyez conscient que les tests d'intégration ne sont généralement pas répétables et vous donneraient des résultats différents à chaque exécution.

5
Teoman shipahi

On dirait que vous pourriez être capable de tester le fichier XML brut et POST Data sans trop de problèmes. le gâteau-cakePHP REST Documentation dit cette:

Si A POST ou la demande de vente dispose d'un type de contenu XML, l'entrée est prise et transmise à une instance d'objet XML de Cake, qui est attribuée à la propriété $ de données du contrôleur. Parce que de cette fonctionnalité, la manipulation XML et POST Les données en parallèle sont transparentes: aucune modification n'est requise pour le contrôleur ou le code modèle. Tout ce dont vous avez besoin devrait finir en $ ceci-> Données.

Essayez de passer à travers votre code de contrôleur dans le mode de débogage pour voir ce qui arrive réellement par $this->data Au cours d'une demande XML.

Pour éviter la base de données en direct, une base de données SQLite in-Memory serait-elle plus facile?

3
Don Kirkby