背景:我正在开发一个项目,该项目使用Celery来安排将来某个时间运行的任务。这些任务推动了最终状态机的状态。这是一个例子:
我目前正在使用this SO answer建议的CELERY_ALWAYS_EAGER
在测试中使用该技术的问题在于,任务代码(在单独的线程中运行)与调度它的运行方式相同。这会导致FSM状态无法正确保存,并且难以测试。我无法确定究竟是什么导致它,但似乎在调用堆栈的底部你保存到当前状态,但是当你返回调用堆栈时,正在保存先前的状态。我可能会花更多的时间来确定代码没有运行时出现的问题,但尝试让代码运行应该如何运行并确保它正在做它应该做的事情似乎更合乎逻辑。
问题:因此,我想知道是否有一种方法可以运行完整的芹菜设置,django可以在测试运行期间使用。如果它可以自动运行,那将是理想的,但即使是一些手动干预也比手动测试行为更好。我认为如果我在测试中设置一个中断,运行芹菜工作者连接到测试数据库,继续django测试,可能有可能。有人曾尝试过这样的事吗?
答案 0 :(得分:1)
您要做的不是单元测试,而是功能/集成测试。
我建议使用一些BDD框架(Behave,Lettuce)并从CI服务器(TravisCI或Jenkins)对外部服务器(例如登台环境)运行BDD测试。
所以,这个过程可能是: