django settings 定义的变量不存在_Django+Celery框架自动化定时任务开发

  本章介绍使用DjCelery即Django+Celery框架开发定时任务功能,在Autotestplat平台上实现单一接口自动化测试脚本、业务场景接口自动化测试脚本、App自动化测试脚本、Web自动化测试脚本等任务的定时执行、调度、管理等,从而取代Jenkins上的定时执行脚本和发送邮件等功能。

自动化测试逻辑流程图11.1所示。       

73838166f1d48716e780009de6e08a98.png

    ▲图11.1

11.1  环境搭建

1.安装

步骤1  安装Celery。pyramid_celery-3.0.0,

    配置https://pypi.python.org/pypi/pyramid_celery/。

步骤2  安装django-clery。django-celery-3.2.2,

    配置https://pypi.python.org/pypi/django- celery。

         INSTALLED_APPS= []

   加入2:

             'djcelery',

               运行 Python manage.py migrate

步骤 3  安装celery-with-redis-3.0,

    地址为https://pypi.python.org/pypi/celery-with-redis/。

步骤 4  安装django-clery-beat。django-celery-beat-1.1.0,

          https://pypi.python.org/pypi/ django_celery_beat。

步骤5 下载Redis-x64-3.2.100,

 Redis-x64-3.2.100.zip         https://github.com/MicrosoftArchive/redis/releases。

2.配置

步骤1  在Settings.py中增加如下内容。

加入1:

import djcelery 

djcelery.setup_loader()    #加载djcelery 

加入2:

#数据库调度

CELERYBEAT_SCHEDULER ='djcelery.schedulers.DatabaseScheduler'

加入3:

BROKER_URL = 'redis://127.0.0.1:6379/0'

BROKER_TRANSPORT = 'redis'

步骤2  在应用Apitest目录下新建celery.py文件1,加入如下内容。

from __future__ import absolute_import

import os

import django

from celery import Celery

from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE','autotest.settings')

django.setup()

app = Celery('autotest')

app.config_from_object('django.conf:settings')

app.autodiscover_tasks(lambda:settings.INSTALLED_APPS)

步骤3  新建tasks.py文件,加入如下内容。

# -*-coding:utf-8 -*-

importrequests, time, sys, re

importurllib, zlib#,

importpymysql

importunittest

from traceimport CoverageResults

importjson

fromidlelib.rpc import response_queue

fromapitest.celery import app

from timeimport sleep

@app.task

def hello_world():

    print('已运行')

步骤4  启动服务python manage.py runserver。

步骤5  解压缩后,运行CMD,切换到相应目录,输入启动Redis指令redis-server redis. windows.conf,成功后出现如图11.2所示界面。

f3dce1dc5d9f543d812cb8924f611226.png

▲图11.2

步骤6  启动指令python manage.py celery worker -l info。

步骤7  启动指令python manage.py celery beat。

11.2  前端功能实现

1.功能描述

完成实现单一接口测试用例、业务场景接口API测试用例、AppUI测试用例、WebUI测试用例的自动化定时任务。

2.程序清单

在autotest\apitest\templates目录下新建periodic_task.html文件,加入如下内容。

{% load bootstrap4 %}

{% bootstrap_css %}

{% bootstrap_javascript %}

产品自动化测试平台

{% csrf_token %}    

名称" required>

搜索

----定时任务----

更改选中的定时任务">

修改"/>

增加另一个测试用例">

增加"/>增加

ID任务名称任务模块时间计划修改时间开启立即编辑删除

{% for task in tasks %}{% for periodic inperiodics %}

{% if task.interval_id != null andtask.interval_id == periodic.id %}

{{ task.id }}{{ task.name }}{{ task.task }} 每{{ periodic.period }} {{ periodic.every}}次{{ task.date_changed }}{{ task.enabled }}{% if task.id == 1 %}

运行

{% elif task.id == 2 %}

运行

{% else %}

{% endif %}

{% else %}

{% endif %}

{% for crontab in crontabs %}

{% if task.crontab_id != null and task.crontab_id ==crontab.id and task.interval_id == 1 %}

{{ task.id }}{{ task.name }}{{ task.task }} {{crontab.month_of_year }}年{{crontab.day_of_month }}月{{crontab.day_of_week }}日{{crontab.hour }}时{{ crontab.minute}}分{{ task.date_changed }}{{ task.enabled }} 运行

{% else %}

{% endif %}

{% endfor %}{% endfor %}{% endfor %}

   {# 把翻页功能固定显示在右下角#}

总数{{ taskcounts }} {# 前端读取定义的变量#}

          {#上一页链接开始#}

        {%if tasks.has_previous %}

           {#  如果有上一页,则正常显示上一页链接#}

           上一页    {#  上一页标签 #}

        {%else %}

           上一页{# 如果当前不存在上一页,则上一页的链接不可单击#}

        {%endif %}

        {# 上一页链接开始#}

        {%for num in tasks.paginator.page_range %}

           {% if num == currentPage %}

                {{ num}} {#显示当前页数链接#}

            {% else %}

                {{ num }}

            {% endif %}

        {% endfor %}

        {# 下一页链接开始#}

        {% if tasks.has_next %} {#  如果有下一页,则正常显示下一页链接#}

            下一页

        {% else %}

            下一页

        {% endif %}

        {# 下一页链接结束#}

功能描述:实现自动化测试任务调度执行,包括单一接口、扫描、流程接口、业务场景、Web搜索、自动化平台测试开发、App登录,CSDN定时任务注册,定时任务执行等功能。

程序清单:在apitest/views.py中加入如下内容。

from .tasks importhello_world

from .tasks importtest_readSQLcase

from djcelery.modelsimport PeriodicTask,CrontabSchedule,IntervalSchedule

# 任务计划

@login_required

defperiodic_task(request):

    username = request.session.get('user', '')

    task_list = PeriodicTask.objects.all()

    task_count =PeriodicTask.objects.all().count()  #统计数

    periodic_list =IntervalSchedule.objects.all()  # 周期任务(如每隔1小时执行1次)

    crontab_list =CrontabSchedule.objects.all()    # 定时任务(如某年某月某日的某时,每# 天的某时)

    paginator = Paginator(task_list, 5)  #生成paginator对象,设置每页显示5条记录

    page = request.GET.get('page',1)  #获取当前的页码数,默认为第1页

    currentPage=int(page)  #把获取的当前页码数转换成整数类型

    try:

        task_list = paginator.page(page)#获取当前页码数的记录列表

    except PageNotAnInteger:

        task_list = paginator.page(1)#如果输入的页数不是整数,则显示第1页内容

    except EmptyPage:

        task_list =paginator.page(paginator.num_pages)#如果输入的页数不在系统的页数中,# 则显示最后一页内容

    return render(request,"periodic_task.html", {"user": username,"tasks":task_list,"taskcounts": task_count, "periodics":periodic_list,"crontabs": crontab_list })

# 搜索功能

@login_required

deftasksearch(request):

    username = request.session.get('user', '')# 读取浏览器登录Session

    search_name =request.GET.get("task", "")

    task_list = PeriodicTask.objects.filter(task__icontains=search_name)

    periodic_list =IntervalSchedule.objects.all()  # 周期任务(如每隔1小时执行1次)

    crontab_list =CrontabSchedule.objects.all()    # 定时任务(如某年某月某日的某时,每# 天的某时)

    return render(request,'periodic_task.html',{"user": username,"tasks":task_list,"periodics":periodic_list,"crontabs": crontab_list })

在autotest/urls.py中加入:

path('periodic_task/',views.periodic_task),

    path('tasksearch/', views.tasksearch),

在apitest/left.html中加入:

                       

                           任务计划       

查看前端页面效果,如图11.3所示。

352b2b2914347dfa653aa9ce97a5d62a.png

▲图11.3

本篇选自:《自动化平台测试开发-Python测试开发实战》

- To Be Continued -


07cab534c361723e6d24c2956ae233e9.png

?戳【阅读原文】加入星球,即刻同行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Celery是一个Python分布式任务队列,它可以帮助我们异步地执行任务,而且还可以定时执行任务。下面是使用DjangoCelery框架来实现定时任务执行的步骤: 1. 安装Celery。可以使用pip工具来安装Celery。 ```bash pip install celery ``` 2. 配置Django项目。在Django项目的settings.py文件中加入以下配置: ```python INSTALLED_APPS = [ # ... 'django_celery_results', 'django_celery_beat', # ... ] CELERY_BROKER_URL = 'redis://localhost:6379' CELERY_RESULT_BACKEND = 'django-db' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_RESULT_SERIALIZER = 'json' CELERY_TASK_SERIALIZER = 'json' ``` 其中,CELERY_BROKER_URL是指定Celery使用Redis作为消息代理,CELERY_RESULT_BACKEND是指定Celery的结果存储方式为Django数据库,CELERY_ACCEPT_CONTENT、CELERY_RESULT_SERIALIZER和CELERY_TASK_SERIALIZER则是指定消息的序列化方式。 3. 创建定时任务。在Django项目的tasks.py文件中定义需要定时执行的任务。例如: ```python from celery import shared_task @shared_task def hello(): print('Hello, World!') ``` 4. 配置定时任务。在Django项目的settings.py文件中加入以下配置: ```python CELERY_BEAT_SCHEDULE = { 'hello_task': { 'task': 'tasks.hello', 'schedule': 10.0, }, } ``` 其中,'hello_task'是任务的名称,'task'指定了任务的函数名,'schedule'则指定了任务的执行间隔时间。 5. 启动Celery。在Django项目的根目录下执行以下命令启动Celery: ```bash celery -A your_project_name worker -l info -B ``` 其中,-A参数指定了Celery要加载的Django项目的名称,-B参数表示启用定时任务。 6. 测试定时任务是否生效。等待10秒钟后,可以在控制台看到输出了'Hello, World!',表示定时任务已经成功执行。 以上就是使用DjangoCelery框架来实现定时任务执行的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值