unitarias test pruebas parallel form data django unit-testing

pruebas - test form django



¿Cómo extender las pruebas de la unidad django en varios archivos? (8)

Creo que la ./manage.py test simplemente ejecuta todas las pruebas trucadas (en django> = 1.7).

Si sus pruebas de organización se refieren a la agrupación y a la recolección de cerezas y usted es fanático de la nose use la nariz de django :

python manage.py test another.test:TestCase.test_method

Si conoces la nariz, entonces sabes cómo "comodín" mucho mejor que todos tus archivos.

PD

Es solo una mejor práctica. Espero que ayude. La respuesta fue tomada de aquí: ejecutar un caso de prueba específico en Django cuando su aplicación tiene un directorio de pruebas

  • Tengo una aplicación python-django
  • Estoy usando el marco de prueba de la unidad
  • Las pruebas están organizadas en el archivo "tests.py" en el directorio del módulo
  • Estoy ejecutando las pruebas a través de la ./manage.py test app

Ahora..

  • El archivo tests.py está tests.py bastante grande / complejo / desordenado
  • Me gustaría dividir tests.py en colecciones más pequeñas de pruebas ...

¿Cómo?


El comportamiento ha cambiado en Django 1.6, por lo que ya no es necesario crear un paquete. Simplemente nombre sus archivos test*.py .

De la documentación de Django 1.7

Cuando ejecuta sus pruebas, el comportamiento predeterminado de la utilidad de prueba es encontrar todos los casos de prueba (es decir, subclases de unittest.TestCase) en cualquier archivo cuyo nombre comience con la prueba, construya automáticamente un conjunto de pruebas de esos casos de prueba, y ejecuta esa suite.

De la documentación de Django 1.6 ,

El descubrimiento de prueba se basa en el descubrimiento de prueba incorporado del módulo unittest. De forma predeterminada, esto descubrirá las pruebas en cualquier archivo llamado "prueba * .py" en el directorio de trabajo actual.

Comportamiento previo, de la documentación de Django 1.5 :

Cuando ejecuta sus pruebas, el comportamiento predeterminado de la utilidad de prueba es encontrar todos los casos de prueba (es decir, subclases de unittest.TestCase) en models.py y tests.py, crear automáticamente un conjunto de pruebas de esos casos de prueba, y ejecuta esa suite.

Existe una segunda forma de definir el conjunto de pruebas para un módulo: si define una función llamada suite () en models.py o tests.py, el corredor de prueba de Django usará esa función para construir el conjunto de pruebas para ese módulo. Esto sigue la organización sugerida para pruebas unitarias. Consulte la documentación de Python para obtener más detalles sobre cómo construir un conjunto de pruebas complejas.


La respuesta según lo declarado por Tomasz es correcta. Sin embargo, puede ser tedioso asegurarse de que las importaciones en __init__.py coincidan con su estructura de archivos.

Para detectar automáticamente todas las pruebas en la carpeta , puede agregar esto en __init__.py :

import unittest def suite(): return unittest.TestLoader().discover("appname.tests", pattern="*.py")

Esto le permitirá ejecutar el nombre de la ./manage.py test appname pero no gestionará la ejecución de pruebas específicas. Para hacer eso puedes usar este código (también en __init__.py ):

import pkgutil import unittest for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): module = loader.find_module(module_name).load_module(module_name) for name in dir(module): obj = getattr(module, name) if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase): exec (''%s = obj'' % obj.__name__)

Ahora puede ejecutar todas sus pruebas a través de la manage.py test app o las específicas a través de la manage.py test app.TestApples


No es necesario codificar nada en init. Solo crea un subdirectorio en tu aplicación. El único requisito es no llamarlo pruebas * Por ejemplo

app/ app/__init_.py app/serializers.py app/testing/ app/testing/__init__.py app/testing/tests_serializers.py


Si tiene una configuración más complicada, o no quiere utilizar declaraciones from ... import * -type, puede definir una función llamada suite en su tests.py (o tests / __ init__.py), que devuelve una instancia de unittest.TestSuite .


Simplemente haga su estructura de directorios así:

myapp/ __init__.py tests/ __init__.py test_one.py test_two.py ... ...

Y python manage.py test myapp funcionará como se esperaba.



Tenga en cuenta que este enfoque ya no es válido desde Django 1.6, consulte esta post .

Puede crear una carpeta de tests con ___init___.py dentro (para que se convierta en un paquete). Luego, agrega allí sus archivos .py de prueba dividida e importe todos en ___init___.py .

Es decir: sustituya el archivo test.py por un módulo que se vea y actúe como el archivo:

Crear un Directorio de tests bajo la aplicación en cuestión

app app/models.py app/views.py app/tests app/tests/__init__.py app/tests/bananas.py app/tests/apples.py

Importe los submódulos en la app/tests/__init__.py :

from bananas import * from apples import *

Ahora puede usar ./manage.py como si estuvieran todos en un solo archivo:

./manage.py test app.some_test_in_bananas