Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Django对简单的celerybeat healthcheck任务进行单元测试?_Django_Unit Testing_Celery_Django Celery_Celerybeat - Fatal编程技术网

如何使用Django对简单的celerybeat healthcheck任务进行单元测试?

如何使用Django对简单的celerybeat healthcheck任务进行单元测试?,django,unit-testing,celery,django-celery,celerybeat,Django,Unit Testing,Celery,Django Celery,Celerybeat,大家好。我希望你做得很好。我是一个Django新手,试图学习RESTful开发的基础知识和其他协同工作的工具,比如芹菜。由于其非常完整的文档,我能够创建在后台运行所需的任务。然而,考虑到一些限制条件和大量数据,其中一些任务远远落后,工人们往往会死亡。出于这个原因,我开始了一个故障排除过程,看看我的员工在停止响应之前能走多远。我创建了一个非常简单的任务,就是每2分钟检查一次芹菜工人的健康状况,并将结果发送到django模型,我可以在我的Web服务器中看到: from celery import a

大家好。我希望你做得很好。我是一个Django新手,试图学习RESTful开发的基础知识和其他协同工作的工具,比如芹菜。由于其非常完整的文档,我能够创建在后台运行所需的任务。然而,考虑到一些限制条件和大量数据,其中一些任务远远落后,工人们往往会死亡。出于这个原因,我开始了一个故障排除过程,看看我的员工在停止响应之前能走多远。我创建了一个非常简单的任务,就是每2分钟检查一次芹菜工人的健康状况,并将结果发送到django模型,我可以在我的Web服务器中看到:

from celery import app, shared_task
from ..models.recommendation import HealthCheck
import logging
from django.utils import timezone


@shared_task(bind=True)
def health_check_monitor(self):
    celery_worker = self.request.hostname
    try:
        logging.info('Celery is alive')
        HealthCheck.objects.update_or_create(
            alive=True, timestamp=timezone.now(),
            defaults={'worker_id': celery_worker})
    except TimeoutError:
        logging.info('Celery is dead')
        HealthCheck.objects.update_or_create(
            alive=False, timestamp=timezone.now(),
            defaults={'worker_id': celery_worker})
HealthCheck
模型将仅由一行组成,用于标识工作人员的姓名(worker@example.com),它运行的时间戳及其状态(死或活)。任务的时间表是在我的全局django设置中设置的,如下所示:

CELERY_BEAT_SCHEDULE = {
    'health_check_monitor': {
        'task': 'project.app.tasks.health_check_monitor.health_check_monitor',
        'schedule': crontab(),
         .
         .
         .
不管芹菜工人身上发生了什么,现在是时候对这些任务进行一些单元测试了。我不太擅长单元测试,所以我一直在拖延。这个决定让我很恼火。我甚至在为我的
health\u check\u monitor
任务进行单元测试时都遇到了问题。最后一个问题是,关于如何为计划任务进行单元测试,web上确实没有太多信息。我的测试如下所示:

class TestCeleryBeat(APITestCase):

    def test_celery_healthcheck(self):
        """Test that celery workers are functioning correctly for the given schedule"""
        from .tasks import health_check_monitor
        task = health_check_monitor.s().delay()
        result = task.get()
        self.assertEqual(task.status, 'SUCCESS')
但由于某种原因,测试操作已经在上面停留了两个小时。我不知道这是为什么。有人能在芹菜方面有点专业知识帮我设计这个简单的测试吗?我甚至不会展示我的其他任务,因为我确信在我掌握了这个窍门之后,我可以自己完成其他任务