Как проверить модель Django с помощью pytest?

Я начинаю работу с pytest. Я настроил pytest, так или иначе, я не смог найти ресурс для специфического тестирования Django с помощью pytest. Как проверить модель с помощью pytest_django ?

Я уже задал вопрос об unittesting,

как я могу эффективно протестировать эту модель Django?

Я хочу знать, как те же тесты могут быть написаны с помощью py.test?

добавив ниже модель и тесты, написанные в unittest.

тестируемая модель,

 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 

и unittest написано,

 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__()) 

Спасибо за любые материалы.

    2 Solutions collect form web for “Как проверить модель Django с помощью pytest?”

    у pytest есть поддержка для запуска тестов стиля python unittest.py. Это предназначено для использования существующих проектов в стиле unittest для использования функций pytest. Конкретно, pytest будет автоматически собирать подклассы unittest.TestCase и их методы тестирования в тестовых файлах. Он будет ссылаться на типичные методы настройки / удаления и вообще попытаться сделать тестовые наборы написанными для запуска на unittest, а также запустить с помощью pytest.

    Данные тесты могут быть протестированы с помощью py.test без каких-либо изменений, однако py.test делает тесты более питоновскими.

     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 

    как упоминалось в @Sid, вы можете использовать маркер @pytest.mark.django_db (декоратор) для доступа к базе данных при запуске теста без использования django.test.TestCase ,

    Вы можете использовать этот плагин, который объединяет pytest с Django: https://pytest-django.readthedocs.org/en/latest/tutorial.html

    Настройка и изменения на pytest.ini описаны здесь: http://www.johnmcostaiii.net/2013/django-projects-to-django-apps-converting-the-unit-tests/

    Здесь вы найдете свой пример, начиная с слайда 57. Эта колода будет полезна при тестировании представлений, а также моделей и настроек, характерных для моделей тестирования: https://speakerdeck.com/pelme/testing-django-applications-with-py -dot тест-europython-2013

    В частности, посмотрите на помощник @ pytest.mark.django_db, зарегистрированный здесь: http://pytest-django.readthedocs.org/en/latest/helpers.html

    Здесь приведен пример использования разрешения db в тесте, также упомянутого в вышеупомянутой колоде. Без mark.django_db тест завершится ошибкой.

     import pytest @pytest.mark.django_db def test_user_count(): assert User.objects.count() == 0 
     
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.