2009-03-28 29 views
11

Estoy escribiendo vistas, pero no tanto como para escribir plantillas de inmediato.Cómo simular una solicitud HTTP Post desde una vista django sin una plantilla

Pero necesito probar mi programa enviando solicitudes de publicaciones.

¿Cómo puedo simular HTTP POST desde un punto de vista Django

Soy consciente de que los módulos urllib2 y httplib de pitón permiten una gran cantidad de opciones, pero estoy en busca de algo que se integra con elegancia en las vistas de Django.

¿Crearías un método que realice una publicación, desde dónde la llamarías?

Actualización: Algunas de las respuestas se refieren a las pruebas enviando un POST a mi aplicación. ¿Qué pasa si quiero enviar a un servicio externo y tratar con la respuesta POST? ¿Cómo puedo hacerlo sin escribir plantillas?

+0

Exactamente lo que estoy buscando también ... ¿Alguien tiene alguna idea? – Sebastian

Respuesta

11

Django tiene un built in mock Client utility que puede imitar las solicitudes como si provinieran de un navegador. Si no necesita imitar completamente un navegador y solo desea invocar sus vistas directamente desde sus pruebas, considere usar un RequestFactory en su lugar.

1

Parece que está buscando una prueba de unidad o una prueba de aceptación. Eche un vistazo a unittest, que es parte de la biblioteca estándar.

Para pruebas ad hoc rápidas mientras desarrollo aplicaciones web, me gusta usar curl. Es una herramienta de línea de comandos simple que genera fácilmente todo tipo de solicitudes HTTP. Puede enviar con un comando como:

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

Curl está disponible en muchas plataformas. Compruébelo en http://curl.haxx.se/

1

Si está viendo esto desde el contexto de escribir pruebas de unidad, podría considerar crear el objeto Request usted mismo y simplemente llamar a la función de vista directamente. Incluso podría burlarse de él y de cualquier otro parámetro que pueda tomar la vista.

2

Para evitar el dolor de la creación de la solicitud objeto sí mismo que puede utilizar este consejo sobre Django snippets

3

Para estos casos creo RequestFactory es ideal.

Funciona como el cliente de prueba de django con la diferencia de que le permite crear un objeto de solicitud que puede usar en cualquier lugar. De modo que podría simplemente crear su propio objeto de solicitud y pasarlo a su vista o formulario para probarlo.

Me gusta este método de prueba más que usar el cliente de prueba, ya que se acerca más a las pruebas de unidad pure. Es decir, probar una sola pieza de código. Si está utilizando el cliente de prueba, hay más capas agregadas antes de que se alcance el código real que está probando.

+0

Los documentos en RequestFactory se han movido a https://docs.djangoproject.com/en/dev/topics/testing/advanced/#django. test.RequestFactory – shacker

Cuestiones relacionadas