2009-03-28 7 views
11

J'écris des vues, pas si désireuses d'écrire des modèles tout de suite.Comment simuler une requête HTTP Post à partir d'une vue django sans modèle

Mais j'ai besoin de tester mon programme en soumettant des demandes de publication.

Comment puis-je simuler HTTP Post à partir d'une vue django

Je suis conscient du fait que les modules de urllib2 et httplib de python permettent beaucoup d'options, mais je cherche quelque chose qui intègre avec élégance dans les vues django.

Est-ce que U créerait une méthode qui exécute un post, d'où l'appelleriez-vous? Mise à jour: Certaines des réponses traitent des tests en envoyant un POST à ​​mon application. Que faire si je veux POSTER à un service externe et gérer la réponse POST. Comment puis-je le faire sans écrire de modèles.

+0

Exactement ce que je cherche aussi bien ... Quelqu'un a une idée? – Sebastian

Répondre

11

Django a un mock Client utility intégré qui peut imiter les requêtes comme s'il provenait d'un navigateur. Si vous n'avez pas besoin d'imiter entièrement un navigateur et que vous souhaitez simplement appeler vos vues directement à partir de vos tests, pensez à utiliser un RequestFactory à la place.

1

Il semble que vous soyez à la recherche d'un test unitaire ou d'un test d'acceptation. Jetez un oeil à unittest qui fait partie de la bibliothèque standard.

Pour des tests ad hoc rapides tout en développant des applications web, j'aime utiliser curl. C'est un outil de ligne de commande simple qui génère facilement toutes sortes de requêtes HTTP. Vous pouvez POST avec une commande comme:

curl -i -d field=value http://localhost:8080/sample/something 

Curl est disponible sur un grand nombre de plates-formes. Check out out à http://curl.haxx.se/

1

Si vous regardez cela dans le contexte de l'écriture d'unittests, vous pourriez envisager de créer l'objet Request vous-même et d'appeler directement la fonction de vue. Vous pourriez même vous moquer de lui, et d'autres paramètres que la vue pourrait prendre.

2

Pour éviter la douleur de créer la demande vous opposer, vous pouvez utiliser cette astuce sur Django snippets

3

Pour de tels cas, je pense RequestFactory est idéalement adapté.

Cela fonctionne exactement comme le client de test de django, à la différence qu'il vous permet de créer un objet de requête que vous pouvez utiliser n'importe où. Vous pouvez donc créer votre propre objet de requête et le transmettre à votre vue ou formulaire pour le tester.

J'aime cette méthode de test plus puis en utilisant le client de test, car il se rapproche de pure tests unitaires. Autrement dit, tester un seul morceau de code. Si vous utilisez le client de test, d'autres couches sont ajoutées avant que le code réel que vous testez soit atteint.

+0

Docs sur RequestFactory ont déplacé à https://docs.djangoproject.com/fr/dev/topics/testing/advanced/#django. test.RequestFactory – shacker

Questions connexes