В документации Celery упоминается тестирование Celery в Django, но не объясняется, как протестировать задачу Celery, если вы не используете Django. Как ты делаешь это?
python
unit-testing
celery
Дэвидмиттон
источник
источник
celery.loader.import_default_modules()
.Я использую это:
Документы: http://docs.celeryproject.org/en/3.1/configuration.html#celery-always-eager
CELERY_ALWAYS_EAGER позволяет запускать задачу синхронно, и вам не нужен сервер сельдерея.
источник
ImportError: No module named celeryconfig
.celeryconfig.py
существует в одном пакете. См. Docs.celeryproject.org/en/latest/getting-started/… .add
из вопроса OP вTestCase
классе?CELERY_TASK_ALWAYS_EAGER
для модульного тестирования.Зависит от того, что именно вы хотите тестировать.
источник
модульный тест
py.test приспособления
Приложение: заставьте send_task уважать
источник
Для тех, кто употребляет Celery 4, это:
Поскольку имена настроек были изменены и их необходимо обновить, если вы решите обновить, см.
https://docs.celeryproject.org/en/latest/history/whatsnew-4.0.html?highlight=what%20is%20new#lowercase-setting-names
источник
Начиная с Celery 3.0 , один из способов установки
CELERY_ALWAYS_EAGER
в Django :источник
Начиная с Celery v4.0 , приспособления py.test предназначены для запуска работника сельдерея только для теста и закрываются по завершении:
Среди других приспособлений, описанных на http://docs.celeryproject.org/en/latest/userguide/testing.html#py-test , вы можете изменить параметры сельдерея по умолчанию, переопределив
celery_config
приспособление следующим образом:По умолчанию тестовый работник использует брокер в памяти и бэкэнд результатов. Нет необходимости использовать локальный Redis или RabbitMQ, если не тестируете определенные функции.
источник
ссылка с использованием pytest.
если вы используете колбу, установите конфигурацию приложения
И в
conftest.py
источник
В моем случае (и я предполагаю, что многие другие) все, что я хотел, это проверить внутреннюю логику задачи с помощью pytest.
TL; DR; закончил тем, что высмеивал все ( ВАРИАНТ 2 )
Пример использования :
proj/tasks.py
tests/test_tasks.py
но, поскольку
shared_task
декоратор выполняет большую часть внутренней логики сельдерея, на самом деле это не модульные тесты.Итак, у меня было 2 варианта:
ВАРИАНТ 1: Отдельная внутренняя логика
proj/tasks_logic.py
proj/tasks.py
Это выглядит очень странно, и кроме того, что делает его менее читаемым, требуется вручную извлекать и передавать атрибуты, которые являются частью запроса, например,
task_id
в случае, если он вам нужен, что делает логику менее чистой.ВАРИАНТ 2: насмехается
над внутренностями сельдерея
tests/__init__.py
что затем позволяет мне издеваться над объектом запроса (опять же, если вам нужны вещи из запроса, такие как идентификатор или счетчик повторных попыток.
tests/test_tasks.py
Это решение гораздо более ручное, но оно дает мне контроль, который мне нужен для фактического модульного тестирования, без повторения и без потери области действия сельдерея.
источник