2015-12-19 104 views
0

我有一個使用djcelery的定期任務。這個任務正在研究數據庫,如果有必要,它會做出相同的更改。 正如你所知道的「python manage.py test」創建一個測試數據庫,那麼我如何在這個測試數據庫中運行這個定期任務?如何正確測試使用djcelery的預定測試

我試着先運行:蟒蛇manage.py測試

然後,當我試圖運行下面的

蟒蛇manage.py芹菜工人-l信息&

蟒蛇manage.py芹菜擊敗-l信息&

測試終止

回答

-1

你不需要於r un芹菜工或芹菜毆打,那不會是很好的單元測試。您正在嘗試測試任務,因此您應該隔離任務並對其進行測試。您需要使用CELERY_ALWAYS_EAGER模式運行測試,或者只需在測試中運行您的任務,而不使用異步模式。

爲了避免使用異步只需撥打你任務是這樣的:

@celery.task 
def task_to_test(): 
    print('stuff') 


def test: 
    task_to_test() 

如果你不能做到這一點。覆蓋您的設置始終渴望使用。

from tasks import task_to_test 

@override_settings(CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, 
        CELERY_ALWAYS_EAGER=True, 
        BROKER_MEMORY='memory', 
        CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',}}) 
class MyTests(TestCase): 
def test(): 
    task_to_test.delay() 
+0

僅有約的觀點Simones點紙條:「你不需要運行芹菜工人或芹菜跳動,這不會是真的好單元測試」這是非常激進的建議和任何人都需要知道如果你真的需要測試你的芹菜配置是否正常工作(你的週期性任務是如何運行的),你可以測試它。這不是很困難。 – Sovetnikov

+0

如果你知道單元測試的含義,那麼你可能會同意我的看法。這個問題不談論測試芹菜配置。我只是假定這個人想要測試他的任務。他接受了這個答案,所以也許他正在尋找。如果您想真正爲此話題做出貢獻,請將您的方法作爲回答並解釋您提出的測試方法。 –