【问题标题】:How to test code that creates Celery tasks?如何测试创建 Celery 任务的代码?
【发布时间】:2019-04-20 23:06:26
【问题描述】:

我读过Testing with Celery,但我还是有点困惑。我想通过手动和显式运行任务来测试生成 Celery 任务的代码,例如:

def test_something(self):
    do_something_that_generates_a_celery_task()
    assert_state_before_task_runs()
    run_task()
    assert_state_after_task_runs()

我不想完全模拟任务的创建,但同时我也不关心测试 Celery 工人正在接受的任务。我假设 Celery 有效。

我尝试执行此操作的实际上下文是一个 Django 应用程序,其中有一些代码在请求中运行时间过长,因此,它被委派给后台作业。

【问题讨论】:

  • 你可以模拟:do_something_that_generates_a_celery_task() 并添加一个side_effect(),它调用 celery 任务将调用的函数。如果 celery 任务是一个函数,那么你可以很容易地在 celery 之外运行
  • @UkuLoskit:我不想嘲笑它。我不确定我可以嘲笑它。这是一个与测试网络服务器交互的 selenium 脚本。
  • 这是相关的,但我还没有设法让它工作:stackoverflow.com/questions/22233680/…

标签: python django celery


【解决方案1】:

在测试模式下使用CELERY_TASK_ALWAYS_EAGER = True。如果您遵循 django-celery 配置的默认指南,您可以在 django 中的 settings.py 中设置此设置。

【讨论】:

  • 这将有两个问题:1)如果任务花费太长时间,http请求将失败,这可能是因为我使用芹菜的原因和2)它不会让我在任务完成之前断言系统的状态;当任务没有被快速完成时,我想这样做以确保用户体验良好。
猜你喜欢
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
相关资源
最近更新 更多