Как исправить двойной запуск тестов с docker в Django

25 октября 2023 г. 9:48

Когда я только перешёл на использование docker и docker compose, Pycharm почему-то начал запускать тестирование дважды. Причём в режиме отладки теста тестирование запускалось один раз, как и положено.

Созданные контейнеры при запуске тестов не содержали дубликатов кода в файловой системе, и Pycharm использовал стандартную команду запуска тестов:

/app/.venv/bin/python /opt/.pycharm_helpers/pycharm/django_test_manage.py test --keepdb content.tests.ContentTest /opt/project/

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

python manage.py test

У меня 2 версии файла docker-compose.yml: один для разработки, а другой для продакшн:

my_app/devops/docker-compose.dev.yml
my_app/devops/docker-compose.prod.yml

Оказалось, что нужно было убрать в файле docker-compose.dev.yml для разработки настройку restart: unless-stopped, чтобы конфигурация режима рестарта для сервиса была по умолчанию, то есть: restart: 'no'. В целом, при разработке нет необходимости перезапускать контейнеры в случае сбоя. Даже наоборот, если происходит какой-то сбой, вы сможете это увидеть по неработающему контейнеру и не пропустить возникающую неполадку (а вот в продакшн версии docker-compose.prod.yml обычно хорошо иметь настройку restart: unless-stopped, чтобы контейнер автоматически запускался при каком-то сбое). Примерно сервис в docker-compose.yml может выглядеть так:

version: '3.8'

services:

    core:
        container_name: spez_core_dev
        build:
            context: .
            dockerfile: dev.Dockerfile
        command: python manage.py runserver 0.0.0.0:8000
        restart: 'no'  # dev server no need to restart automatically (it excludes double run testing)
        ...

В чём причина такого поведения мне до конца до сих пор не понятна: либо при запуске теста контейнер останавливался и снова запускался по каким-то причинам, либо сам docker думает, что контейнер отвалился и нужно создать новый и его запустить, а может причина в другом...
 

Оцените статью

0 из 5 (всего 0 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

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

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/how-to-fix-double-run-testing-with-docker-in-django/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/how-to-fix-double-run-testing-with-docker-in-django/">https://vivazzi.pro/ru/it/how-to-fix-double-run-testing-with-docker-in-django/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

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

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц