在unittest中运行芹菜工人

时间:2013-06-19 02:20:54

标签: python unit-testing integration-testing celery

我有以下设置:

  • Django-Celery项目A注册任务foo
  • 项目B:使用Celery的send_task来呼叫foo
  • 项目A和项目B具有相同的配置:SQS,msgpack 用于序列化,gzip等。
  • 每个项目都位于不同的github存储库

我已经对项目A中的“foo”进行了单元测试,完全不使用Celery,仅使用foo(1,2,3)并断言结果。我知道它有效。

我已经过单元测试,项目B中的send_task发送了正确的参数。

我没有测试,需要你的建议是两个项目之间的整合。我想有一个单元测试:

  • 在项目A
  • 的上下文中启动一名工作人员
  • 使用项目B的代码发送任务
  • 断言,第一步中启动的工作人员使用我在第二步中发送的参数获取任务,并且foo函数返回了预期结果。

似乎可以通过使用python的子进程并解析worker的输出来解决这个问题,但这很难看。在这种情况下,推荐的单元测试方法是什么?您可以分享的任何代码段吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定是否值得使用单元测试明确测试运输机制(即通过芹菜发送任务参数)。就个人而言,我会按如下方式编写我的测试(可以在几个单元测试中分开):

  • 使用项目B中的代码生成包含样本参数的任务。
  • 使用Celery使用的相同方法对任务参数进行编码(即,对参数进行酸洗或将其编码为JSON)。
  • 再次解码任务参数,检查是否发生了损坏。
  • 调用任务函数,确保它产生正确的结果。
  • 对任务功能的结果执行相同的编码/解码序列。

使用此方法,您将能够测试

  • 任务生成按预期工作
  • 编码&任务参数和结果的解码按预期工作

如有必要,您仍然可以使用系统测试独立测试运输机制的功能。