【发布时间】:2014-06-19 07:51:38
【问题描述】:
我正在使用具有多个 celery 工作人员的面向软件的架构(我们称他们为 worker1、worker2 和 worker3)。所有三个工作人员都是独立的实体(即,独立的代码库、独立的仓库、独立的 celery 实例、独立的机器),它们都没有连接到 Django 应用程序。
与这三个工作人员中的每一个进行通信的是一个基于 Django、MySQL 支持的 RESTful API。
在开发过程中,这些服务都在一个 vagrant box 上,每一个都作为一个单独的机器运行在一个单独的端口上。我们为所有 Celery 任务提供了一个 RabbitMQ 代理。
通过这些服务的典型路径可能如下所示:worker1 从设备获取消息,进行一些处理,在worker2 上排队任务,然后进行进一步处理并向@987654326 发出 POST @,写入 MySQL 数据库并在 worker3 上触发一个任务,该任务执行一些其他处理并对 API 进行另一个 POST,从而导致 MySQL 写入。
服务之间的通信很好,但每次我们对任何服务进行更改时都测试此流程非常烦人。我真的很想进行一些完整的集成测试(即,从发送到worker1 的消息开始并遍历整个链),但我不确定从哪里开始。我面临的主要问题是:
如果我在worker1 上排队,我怎么可能知道整个流程何时结束?当我不知道结果是否已经到达时,如何对结果做出合理的断言?
如何处理数据库设置/拆除?我想在每次测试结束时删除测试期间所做的所有条目,但是如果我从 Django 应用程序外部开始测试,我不确定如何有效地清除它。每次测试后手动删除它并重新创建它似乎开销太大。
【问题讨论】:
标签: python django integration celery