¿Cómo probar un modelo de Django con pytest?

Estoy empezando con pytest. He configurado pytest, de todos modos no pude encontrar un recurso en las pruebas específicas de Django con pytest. ¿Cómo pytest_django un modelo con pytest_django ?

Ya he hecho una pregunta en unittesting,

¿Cómo puedo probar eficientemente este modelo de Django?

Quiero saber cómo se pueden escribir las mismas pruebas con py.test?

Añadiendo a continuación el modelo y las pruebas escritas en unittest.

El modelo bajo prueba es,

 class User(AbstractBaseUser, PermissionsMixin): username = models.CharField(max_length=25, unique=True, error_messages={ 'unique': 'The username is taken' }) first_name = models.CharField(max_length=60, blank=True, null=True) last_name = models.CharField(max_length=60, blank=True, null=True) email = models.EmailField(unique=True, db_index=True, error_messages={ 'unique': 'This email id is already registered!' }) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) date_joined = models.DateTimeField(auto_now_add=True) USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username',] objects = UserManager() def get_full_name(self): return ' '.join([self.first_name, self.last_name]) def get_short_name(self): return self.email def __unicode__(self): return self.username 

y la unittest escrita,

 class SettingsTest(TestCase): def test_account_is_configured(self): self.assertTrue('accounts' in INSTALLED_APPS) self.assertTrue('accounts.User' == AUTH_USER_MODEL) class UserTest(TestCase): def setUp(self): self.username = "testuser" self.email = "testuser@testbase.com" self.first_name = "Test" self.last_name = "User" self.password = "z" self.test_user = User.objects.create_user( username=self.username, email=self.email, first_name=self.first_name, last_name=self.last_name ) def test_create_user(self): self.assertIsInstance(self.test_user, User) def test_default_user_is_active(self): self.assertTrue(self.test_user.is_active) def test_default_user_is_staff(self): self.assertFalse(self.test_user.is_staff) def test_default_user_is_superuser(self): self.assertFalse(self.test_user.is_superuser) def test_get_full_name(self): self.assertEqual('Test User', self.test_user.get_full_name()) def test_get_short_name(self): self.assertEqual(self.email, self.test_user.get_short_name()) def test_unicode(self): self.assertEqual(self.username, self.test_user.__unicode__()) 

Gracias por cualquier entrada.

Pytest tiene soporte para ejecutar pruebas de estilo de Python unittest.py. Está destinado a aprovechar los proyectos existentes de estilo de prueba de unidad para usar características de pytest. Concretamente, pytest recostackrá automáticamente las subclases de unittest.TestCase y sus métodos de prueba en los archivos de prueba. Invocará los métodos de configuración / desassembly típicos y, en general, intentará hacer que los paquetes de prueba se ejecuten en unittest, para que también se ejecuten con pytest.

Las pruebas dadas se pueden probar con py.test sin ninguna modificación, sin embargo py.test hace que las pruebas sean más pythonicas.

 class SettingsTest(TestCase): def test_account_is_configured(self): assert 'accounts' in INSTALLED_APPS assert 'accounts.User' == AUTH_USER_MODEL class UserTest(TestCase): def setUp(self): self.username = "testuser" self.email = "testuser@testbase.com" self.first_name = "Test" self.last_name = "User" self.password = "z" self.test_user = User.objects.create_user( username=self.username, email=self.email, first_name=self.first_name, last_name=self.last_name ) def test_create_user(self): assert isinstance(self.test_user, User) def test_default_user_is_active(self): assert self.test_user.is_active def test_default_user_is_staff(self): assert not self.test_user.is_staff def test_default_user_is_superuser(self): assert not self.test_user.is_superuser def test_get_full_name(self): assert self.test_user.get_full_name() == 'Test User' def test_get_short_name(self): assert self.test_user.get_short_name() == self.email def test_unicode(self): assert self.test_user.__unicode__() == self.username 

como se menciona en @Sid, puede usar el marcador @pytest.mark.django_db (decorador) para acceder a la base de datos al ejecutar una prueba sin usar django.test.TestCase ,

Puede usar este complemento que integra pytest con Django: https://pytest-django.readthedocs.org/en/latest/tutorial.html

La configuración y los cambios en pytest.ini se describen aquí: http://www.johnmcostaiii.net/2013/django-projects-to-django-apps-converting-the-unit-tests/

Encontrará su ejemplo aquí a partir de la diapositiva 57. Esta cubierta será útil para probar vistas, así como modelos y configuraciones específicas para los modelos de prueba: https://speakerdeck.com/pelme/testing-django-applications-with-py -dot-test-europython-2013

Específicamente, busque en @ pytest.mark.django_db helper documentado aquí: http://pytest-django.readthedocs.org/en/latest/helpers.html

Aquí se copia un ejemplo para permitir el acceso a la base de datos en una prueba que también se menciona en la cubierta anterior. Sin mark.django_db la prueba fallaría.

 import pytest @pytest.mark.django_db def test_user_count(): assert User.objects.count() == 0