Модульное тестирование с джанго-сельдереем?

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

  1. Как мы можем обойти task.delay() во время теста (я попытался установить CELERY_ALWAYS_EAGER = True но это не имело никакого значения)?
  2. Как использовать рекомендуемые настройки теста (если это наилучший способ), не изменяя наши settings.py?
  3. Можем ли мы по-прежнему использовать manage.py test или нам нужно использовать собственный бегун?

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

77 голосов | спросил Jason Webb 30 +04002010-10-30T00:57:31+04:00312010bEurope/MoscowSat, 30 Oct 2010 00:57:31 +0400 2010, 00:57:31

3 ответа


0

Попробуйте настроить:

BROKER_BACKEND = 'memory'

(благодаря asksol комментарию.)

ответил a paid nerd 3 Mayam11 2011, 03:19:53
0

Вот выдержка из моего базового класса тестирования, который заглушает метод apply_async и записывает вызовы к нему (включая Task.delay.) Это немного брутто, но мне удалось соответствовать моим потребностям за последние несколько месяцев, когда я его использовал.

from django.test import TestCase
from celery.task.base import Task
# For recent versions, Task has been moved to celery.task.app:
# from celery.app.task import Task
# See http://docs.celeryproject.org/en/latest/reference/celery.app.task.html

class CeleryTestCaseBase(TestCase):

    def setUp(self):
        super(CeleryTestCaseBase, self).setUp()
        self.applied_tasks = []

        self.task_apply_async_orig = Task.apply_async

        @classmethod
        def new_apply_async(task_class, args=None, kwargs=None, **options):
            self.handle_apply_async(task_class, args, kwargs, **options)

        # monkey patch the regular apply_sync with our method
        Task.apply_async = new_apply_async

    def tearDown(self):
        super(CeleryTestCaseBase, self).tearDown()

        # Reset the monkey patch to the original method
        Task.apply_async = self.task_apply_async_orig

    def handle_apply_async(self, task_class, args=None, kwargs=None, **options):
        self.applied_tasks.append((task_class, tuple(args), kwargs))

    def assert_task_sent(self, task_class, *args, **kwargs):
        was_sent = any(task_class == task[0] and args == task[1] and kwargs == task[2]
                       for task in self.applied_tasks)
        self.assertTrue(was_sent, 'Task not called w/class %s and args %s' % (task_class, args))

    def assert_task_not_sent(self, task_class):
        was_sent = any(task_class == task[0] for task in self.applied_tasks)
        self.assertFalse(was_sent, 'Task was not expected to be called, but was.  Applied tasks: %s' %                 self.applied_tasks)

Вот пример того, как вы будете использовать его в своих тестовых примерах: «вне головы»:

mymodule.py

from my_tasks import SomeTask

def run_some_task(should_run):
    if should_run:
        SomeTask.delay(1, some_kwarg=2)

test_mymodule.py

class RunSomeTaskTest(CeleryTestCaseBase):
    def test_should_run(self):
        run_some_task(should_run=True)
        self.assert_task_sent(SomeTask, 1, some_kwarg=2)

    def test_should_not_run(self):
        run_some_task(should_run=False)
        self.assert_task_not_sent(SomeTask)
ответил Sam Dolan 30 ThuEurope/Moscow2010-12-30T05:52:08+03:00Europe/Moscow12bEurope/MoscowThu, 30 Dec 2010 05:52:08 +0300 2010, 05:52:08
0

, поскольку я все еще вижу это в результатах поиска, настройки переопределяются с помощью

TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner'

работал для меня согласно документам по сельдерею

ответил dorkforce 23 +04002014-10-23T04:20:56+04:00312014bEurope/MoscowThu, 23 Oct 2014 04:20:56 +0400 2014, 04:20:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132