2013-06-19 4 views
5

У меня есть следующие настройки:Запуск сельдерея работника в UnitTest

  • Django-сельдерей проект регистрирует задачу foo
  • Проект Б: Использование send_task сельдерея для вызова foo
  • Проекта A и проект B есть та же конфигурация: SQS, msgpack для сериализации, GZIP и т.д.
  • Каждый проект живет на другом хранилище GitHub

У меня есть проверенные модулем звонки на «foo» в проекте A, без использования Celery вообще, всего foo(1,2,3) и утверждать результат. Я знаю, что это работает.

Я тестировал модуль, который send_task в проекте B отправляет правильные параметры.

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

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

Кажется, что это можно взломать, используя подпроцесс python и разбор выходных данных рабочего, но это уродливо. Каков рекомендуемый подход к модульному тестированию в таких случаях? Любой фрагмент кода, который вы могли бы поделиться? Благодаря!

+0

Помогите нам понять, почему вы хотите проверить, что происходит на стороне рабочего? Недостаточно ли протестировать с вызывающей стороны, и если результаты правильного ответа объявят тест успешным? –

ответ

1

Я не уверен, что стоит явно проверить механизм транспортировки (то есть отправить параметры задачи через сельдерей) с помощью модульного теста. Лично я бы написал свой тест следующим образом (можно разделить на несколько модульных тестов):

  • Используйте код из проекта B, чтобы сгенерировать задачу с параметрами образца.
  • Кодировать параметры задачи с использованием того же метода, который используется сельдерей (т. Е. Травления параметров или их кодирования как JSON).
  • Повторно декодируйте параметры задачи, проверяя, что не произошло никакого повреждения.
  • Вызовите функцию задачи, убедившись, что она дает правильный результат.
  • Выполнение той же последовательности кодирования/декодирования для результатов функции задачи.

Используя этот метод, вы будете иметь возможность проверить, что поколение

  • Задача работы по назначению
  • Кодирование & декодирования параметров задачи и результаты работы, как ожидается,

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

Смежные вопросы