sku*_*kid 6 python django unit-testing celery
我正在使用带有Django 1.6的Celery 3.1.11.我一直在寻找,但我最近没有找到很多关于芹菜的问题.(3.1)
我试图通过manage.py运行单元测试:
>> python manage.py test calculationApp
Run Code Online (Sandbox Code Playgroud)
在我的tests.py for calculationApp中创建任务:
c = calculateCarbon.delay(project.id)
r = AsyncResult(c.id).ready()
print "c.backend: %s" % (c.backend)
print "AsyncResult(c.id).ready(): %s" % (r)
print "AsyncResult(c.id).state: %s" % (AsyncResult(c.id).state)
print "AsyncResult(c.id).result: %s" % (AsyncResult(c.id).result)
while not r:
r = AsyncResult(c.id).ready()
Run Code Online (Sandbox Code Playgroud)
当我运行单元测试时,测试卡在测试中并且从未准备好(它永远不会超过while循环),我将其作为输出:
/usr/lib/python2.7/dist-packages/numpy/core/_methods.py:96: RuntimeWarning: invalid value encountered in double_scalars
ret = ret / float(rcount)
c.backend: None
AsyncResult(c.id).ready(): False
AsyncResult(c.id).state: PENDING
AsyncResult(c.id).result: None
Run Code Online (Sandbox Code Playgroud)
此时我必须按CTRL + C两次.
我正在阅读Celery 3.0 Docs - Unit Testing,它告诉我要设置.
CELERY_ALWAYS_EAGER = True
TEST_RUNNER = 'djcelery.contrib.test_runner.CeleryTestSuiteRunner'
Run Code Online (Sandbox Code Playgroud)
这对芹菜3.1.11仍然有效吗?我找不到关于Django单元测试的Celery 3.1的任何相关文档,我不确定这些设置是否有帮助或伤害,因为当我有这些设置时,任务的后端没有返回,但计算似乎实际执行.
当我从设置文件中删除这两行时,我得到以下结果:
c.backend: <celery.backends.amqp.AMQPBackend object at 0x7a4de50>
AsyncResult(c.id).ready(): False
AsyncResult(c.id).state: PENDING
AsyncResult(c.id).result: None
AsyncResult(c.id).ready(): True
AsyncResult(c.id).state: FAILURE
AsyncResult(c.id).result: task args must be a list or tuple
======================================================================
FAIL: test_calculations (measuring.tests.TestCalculations)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/var/www/project/calculationApp/tests.py", line 70, in test_calculations
self.assertEqual(int(number.attribute), 2212)
AssertionError: 0 != 2212
----------------------------------------------------------------------
Ran 1 test in 2.765s
Run Code Online (Sandbox Code Playgroud)
小智 2
你是想测试实际的计算逻辑还是 Celery 的工作原理?这是两件不同的事情,在我看来,你应该非常努力地单独测试你的逻辑。它更快、更面向未来(如果你决定用其他东西代替 Celery 会怎么样)并且简化了很多事情。如果您坚持同时测试两者,只需在单元测试上下文中将 CELERY_ALWAYS_EAGER 设置为 True 就可以解决您的问题。
您不需要测试 Celery,它可以工作,并且有自己的测试套件来证明它。
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |