Пошаговое руководство по тестированию приложения Django с помощью Pytest за 5 минут.

По мере того, как мы видим компании, использующие искусственный интеллект (ИИ), машинное обучение (МО) и науку о данных, мы наблюдаем резкий рост использования языка Python, поскольку он широко используется в этих областях. Фреймворк Django, в частности, стал панацеей в арсенале Python-разработчиков. Это мощный и гибкий инструментарий для разработки веб-API, включая REST API.

В результате всех функций, которые он предоставляет, Django стал любимым оружием в арсенале разработчиков. Разработчики, стремящиеся разработать лучшие приложения, часто недооценивают модульное тестирование разработанных продуктов.

Сказав это, эксперты Python и Django понимают, что модульное тестирование приложений является важным шагом, поскольку они помогают обнаруживать ошибки и улучшают производительность приложения. Вот почему лучшие компании-разработчики Django придают огромное значение. Поэтому убедитесь, что вы рассматриваете модульное тестирование как критерий при найме компании-разработчика Django.

В этом сообщении блога мы собираемся показать, как вы можете написать базовый модульный тест, используя Pytest для приложений Django. Давайте начнем!

Зачем использовать Pytest?

Pytest — это фреймворк, на который сильно полагаются эксперты Django. Это упрощает и упрощает написание небольших тестовых кодов, а также масштабирует и поддерживает комплексное функциональное тестирование для приложений или библиотек. Одним из основных применений Pytest является написание тестовых кодов для API. Pytest, как следует из названия, пишет тестовые коды на языке программирования Python.

Pytest используется многими разными разработчиками и компаниями, потому что он обеспечивает автоматизацию — у него есть собственный способ обнаружения тестов, запуска тестов, пропуска всего подмножества тестов и даже запуска нескольких тестов. Pytest — лучший вариант, когда целью является сокращение времени выполнения. Некоторые из основных преимуществ Pytest:

  • Он имеет очень легкий и простой синтаксис, который делает ваш старт легким и быстрым.
  • Время выполнения набора тестов сокращается из-за параллельного выполнения нескольких тестов.
  • Он обнаруживает тестовые файлы и тестовые функции без явного упоминания с полной автоматизацией.
  • Вы можете пропустить все подмножество тестов во время выполнения, а также запустить все подмножество тестов.
  • Pytest имеет масштабируемые модульные приспособления.
  • Pytest полностью открыт и бесплатен для всех.

Эти преимущества являются одними из основных причин, по которым все больше и больше компаний, которые хотят масштабироваться и оцифровывать, обращаются к найму разработчиков Python Django. Особенно в 2021 году использование Python во многих различных направлениях становится все более популярным и очевидным, поскольку все больше и больше компаний становятся опытными в его развертывании.

Некоторые из самых привлекательных особенностей Pytest

Настройка Pytest для вашего приложения Django

Фикстуры, предоставляемые в Django, не идеальны для некоторых случаев, и именно здесь на помощь приходят фикстуры Pytest.

Установка плагина Pytest и Django

Этот плагин поддерживается командой разработчиков Pytest и предоставляет полезные инструменты для написания тестовых кодов для любых проектов на Django. Ниже описан процесс установки PyTest:

Шаг 1) Вы можете установить pytest,

pip install pytest==2.9.1

После завершения установки вы можете подтвердить ее с помощью

py.test -h

Получить доступ к базе данных из тестов

Чтобы получить доступ к базе данных, вам нужно начать с запуска теста. Напишите тест, который поможет вам проверить, правильно ли функция create-user() устанавливает имя пользователя. После того, как тест будет выполнен из вашей команды, если он не пройден, это означает, что вам нужно внедрить специальное приспособление под названием DB. Это приспособление является частью подключаемого модуля Django и очень важно для доступа к базам данных.

Создание и поддержка фикстур для моделей Django.

После того, как доступ предоставлен и имя пользователя установлено, вам необходимо установить пароль. Тест поможет вам проверить ваш пароль. Вы также должны пометить функции как фикстуры, чтобы внедрить больше тестовых случаев. Таким образом, вам не нужно переходить к каждому тестовому набору и добавлять его в группу. С помощью фикстур всего однократное обследование позволяет добавлять кейсы в группу.

Фикстуры помогают вам избежать повторения, а также делают тесты более удобными в сопровождении — вот почему большинство компаний-разработчиков Python переходят на использование фреймворка Django и Pytest.

Что такое процесс тестирования Django с помощью Pytest?

Прежде чем мы перейдем к части тестирования, нам нужно выполнить некоторые важные функции. Давайте сначала пройдемся по ним.

Создайте виртуальную среду:

Мы используем Python 3 со встроенной поддержкой создания виртуальных сред. Вам нужно запустить следующую команду, чтобы создать и активировать виртуальную среду:

$ mkdir pytest_project $ cd pytest_project $ python3 -m venv pytest-env

Выполнение вышеуказанной команды создаст виртуальную среду с именем pytest-env в рабочем каталоге.

Активировать виртуальную среду:

Нам нужно активировать virtualenv, чтобы мы могли его использовать. Вот команда:

$ source pytest-env/bin/activate

Активация гарантирует, что все пакеты будут установлены в виртуальной среде, а не в глобальной установке Python.

Установите Pytest. Чтобы установить Pytest, вам потребуется установить диспетчер пакетов pip. После этого вы можете установить Pytest, используя следующую команду:

pip install -U pytest

Шаг 1. Создайте новый проект Django из терминала

django-admin startproject django_testing .

Шаг 2. Создайте образец приложения Django

python manage.py startapp main_app

Шаг 3. Зарегистрируйте приложение

# settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'main_app.apps.MainAppConfig' # add this ]

Шаг 4. Измените каталог шаблонов

# settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # add this 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]

Шаг 5. Запустите приложение

python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. December 01, 2021 - 21:15:31 Django version 3.0.5, using settings 'django_testing.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

Шаг 6. Создайте файл pytest

touch pytest.ini # pytest.ini [pytest] DJANGO_SETTINGS_MODULE = django_testing.settings # -- recommended but optional: python_files = tests.py test_*.py *_tests.py

Шаг 7. Запустите набор тестов

$ pytest ============================= test session starts ============================== platform linux -- Python 3.7.5, pytest-5.4.1, py-1.8.1, pluggy-0.13.1 rootdir: /home/username/projects/username/source-code/django_testing_using_pytest, inifile: pytest.ini plugins: django-3.9.0 collected 0 items

Вот тестовый образец, который мы использовали. Вы можете написать тест, который работает для вас.

# models.py from django.db import models class Contact(models.Model): first_name = models.CharField(max_length=150) last_name = models.CharField(max_length=150) phone = models.CharField(max_length=150) email = models.CharField(max_length=150, blank=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.phone # tests.py import pytest from .models import Contact @pytest.mark.django_db def test_contact_create(): contact = Contact.objects.create( first_name="John", last_name="Doe", email="[email protected]", phone="00221 70 992 33 43" ) assert contact.email == "[email protected]" assert contact.phone == "00221 70 992 33 43"
pytest ============================= test session starts ============================= platform linux -- Python 3.7.5, pytest-5.4.1, py-1.8.1, pluggy-0.13.1 django: settings: django_testing.settings (from ini) rootdir: /home/username/projects/username/source-code/django_testing_using_pytest, inifile: pytest.ini plugins: django-3.9.0 collected 1 item main_app/tests.py . [100%] ============================== 1 passed in 0.27s ==============================

Как видите, наш тест успешно пройден. Легко, не так ли? Мы надеемся, что это помогло вам. Возможно, вам нужно быть экспертом Django для разработки приложения, но не для запуска теста.

Заключительные слова

Фреймворк Django играет ключевую роль в разработке Python. Часто эксперты Django подчеркивают важность модульного тестирования приложения на сложность, но Pytest предоставляет простой способ сделать это. Независимо от того, где он находится в спектре сложности, вам больше не нужно об этом беспокоиться.

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.