软件测试 | 测试开发 | Django+Celery框架自动化定时任务开发

这篇具有很好参考价值的文章主要介绍了软件测试 | 测试开发 | Django+Celery框架自动化定时任务开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

软件测试 | 测试开发 | Django+Celery框架自动化定时任务开发

▲图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所示界面。

软件测试 | 测试开发 | Django+Celery框架自动化定时任务开发

▲图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文件,加入如下内容。

<html>

<head>

{% load bootstrap4 %}

{% bootstrap_css %}

{% bootstrap_javascript %}

<title>产品自动化测试平台</title>

<link rel=“stylesheet"type=“text/css” href=”/static/admin/css/forms.css" />

<script type=“text/javascript"src=”/admin/jsi18n/"></script>

<script type=“text/javascript"src=”/static/admin/js/vendor/jquery/jquery.js"></script>

<script type=“text/javascript"src=”/static/admin/js/jquery.init.js"></script>

<script type=“text/javascript"src=”/static/admin/js/core.js"></script>

<script type=“text/javascript"src=”/static/admin/js/admin/RelatedObjectLookups.js"></script>

<script type=“text/javascript"src=”/static/admin/js/actions.js"></script>

<script type=“text/javascript"src=”/static/admin/js/urlify.js"></script>

<script type=“text/javascript"src=”/static/admin/js/prepopulate.js"></script>

<script type=“text/javascript"src=”/static/admin/js/vendor/xregexp/xregexp.js"></script>

<meta name="viewport"content=“user-scalable=no, width=device-width, initial-scale=1.0,maximum-scale=1.0”>

<link rel=“stylesheet"type=“text/css” href=”/static/admin/css/responsive.css"/>

<meta name="robots"content=“NONE,NOARCHIVE” />

</head>

<body role=“document”>

<!-- 导航栏–>

<nav class=“navbar navbar-expand-smbg-dark navbar-dark fixed-top”>

<div>

<ahref="#">&nbsp;</a>

<ul>

</ul>

<ul>

<li><astyle=‘color:white’ href="#"></a></li>

<li><astyle=‘color:white’ href="/logout/"></a></li>

</ul>

</div>

</nav>

<!-- 搜索栏–>

<divstyle=“padding-top: 70px;”>

<formmethod=“get” action="/tasksearch/">

{% csrf_token %}

<input type="search"name=“task” placeholder=“名称” required>

<button type=“submit”>搜索</button>

<!-- 增加定时任务–>

<div style=“float:right;width:73%”>

<select name="PeriodicTask"id=“PeriodicTask”>

<option value="" selected>----定时任务----</option>

</select>

<a id=“change_id_PeriodicTask"data-href-template=”/admin/djcelery/periodictask/fk/change/?_to_field=id&amp;_popup=1"title=“更改选中的定时任务”>

<imgsrc="/static/admin/img/icon-changelink.svg" alt=“修改”/>

</a>

<a style=‘color:light blue’ id=“add_id_PeriodicTask” href="/admin/djcelery/periodictask/add/?_to_field=id&amp;_popup=1"title=“增加另一个测试用例”>

<imgsrc="/static/admin/img/icon-addlink.svg" alt=“增加”/>增加

</a>

</form>

</div>

<!-- 任务计划列表–>

<divstyle=“padding-top: 20px;”>

<div>

<table class=“table table-striped”>

<thead>

<tr>

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

</tr>

</thead>

<tbody>

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

<tr>

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

<td>{{ task.id }}</td>

<td>{{ task.name }}</td>

<td>{{ task.task }}</td>

<td><a style=‘color:green’>每{{ periodic.period }} {{ periodic.every}}次</a></td>

<td>{{ task.date_changed }}</td>

<td>{{ task.enabled }}</td>

<td>{% if task.id == 1 %}

<a href="…/task_apis"target=“mainFrame”>运行</a>

{% elif task.id == 2 %}

<a href="…/task_apitest"target=“mainFrame”>运行</a>

{% else %}

{% endif %}

</td>

<td><a style='color:light blue’class=“related-widget-wrapper-link add-related"id=“add_id_Apitest” href=”…/admin/djcelery/periodictask/{{task.id }}/change/?_to_field=id&_popup=1"><imgsrc="/static/admin/img/icon-changelink.svg"/></a></td>

<td><a style='color:light blue’class=“related-widget-wrapper-link add-related” id=“add_id_Apitest"href=”…/admin/djcelery/periodictask/{{ task.id}}/delete/?_to_field=id&_popup=1"><imgsrc="/static/admin/img/icon-deletelink.svg"/></a></td>

{% else %}

{% endif %}

{% for crontab in crontabs %}

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

<td>{{ task.id }}</td>

<td>{{ task.name }}</td>

<td>{{ task.task }}</td>

<td><a style=‘color:green’>{{crontab.month_of_year }}年{{crontab.day_of_month }}月{{crontab.day_of_week }}日{{crontab.hour }}时{{ crontab.minute}}分</a></td>

<td>{{ task.date_changed }}</td>

<td>{{ task.enabled }}</td>

<td><a href="…/task_apis"target=“mainFrame”>运行</a></td>

<td><a style='color:light blue’class=“related-widget-wrapper-link add-related"id=“add_id_Apitest” href=”…/admin/djcelery/periodictask/{{task.id }}/change/?_to_field=id&_popup=1"><imgsrc="/static/admin/img/icon-changelink.svg"/></a></td>

<td><a style='color:light blue’class=“related-widget-wrapper-link add-related"id=“add_id_Apitest” href=”…/admin/djcelery/periodictask/{{task.id }}/delete/?_to_field=id&_popup=1"><imgsrc="/static/admin/img/icon-deletelink.svg"/></a></td>

{% else %}

{% endif %}

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

</tbody>

</table>

</div>

</div>

<span style=“position:absolute;right:100px; bottom:30px;”> {# 把翻页功能固定显示在右下角#}

<div style="position:absolute; right:100px; width:100px; ">

<tr><th>总数</th><td>{{ taskcounts }}</td></tr> {# 前端读取定义的变量#}

</div>

<div>

&lt;ulclass="pagination" id="pager"&gt;

      {#上一页链接开始#}

    {%if tasks.has_previous %}

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

       &lt;li&gt;&lt;ahref="/periodic_task/?page={{ tasks.previous_page_number }}"&gt;上一页&lt;/a&gt;&lt;/li&gt;    {#  上一页标签 #}

    {%else %}

       &lt;li class="previous disabled"&gt;&lt;ahref="#"&gt;上一页&lt;/a&gt;&lt;/li&gt;{# 如果当前不存在上一页,则上一页的链接不可单击#}

    {%endif %}

    {# 上一页链接开始#}

   

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

    

       {% if num == currentPage %}

            &lt;li&gt;&lt;a href="/periodic_task/?page={{ num }}"&gt;{{ num}}&lt;/a&gt;&lt;/li&gt; {#显示当前页数链接#}

        {% else %}

            &lt;liclass="item"&gt;&lt;a href="/periodic_task/?page={{ num}}"&gt;{{ num }}&lt;/a&gt;&lt;/li&gt;

        {% endif %}

    {% endfor %}

   

    {# 下一页链接开始#}

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

        &lt;liclass="next"&gt;&lt;a href="/periodic_task/?page={{tasks.next_page_number }}"&gt;下一页&lt;/a&gt;&lt;/li&gt;

    {% else %}

        &lt;li&gt;&lt;a href="#"&gt;下一页&lt;/a&gt;&lt;/li&gt;

    {% endif %}

    {# 下一页链接结束#}

&lt;/ul&gt;

</div>

</body>

</html>

功能描述:实现自动化测试任务调度执行,包括单一接口、扫描、流程接口、业务场景、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中加入:

<tr> <td>

&lt;li&gt;

                    &lt;a  href="../periodic_task"target="mainFrame"&gt;

                        &lt;iclass="glyphicon glyphicon-fire"&gt;&lt;/i&gt;

                       任务计划       

                    &lt;/a&gt;

                &lt;/li&gt;

</tr> </td>

&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

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

软件测试 | 测试开发 | Django+Celery框架自动化定时任务开发文章来源地址https://www.toymoban.com/news/detail-402227.html

到了这里,关于软件测试 | 测试开发 | Django+Celery框架自动化定时任务开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试/测试开发丨Selenium Web自动化测试基本操作

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26901 模拟功能测试中对浏览器的操作 get方法打开浏览器 refresh方法刷新页面 用back方法回退到上一个界面 maximize_window方法使窗口最大化 minimize_window方法使窗口最小化 标签: a 属性:href 类属性

    2024年02月10日
    浏览(52)
  • 软件测试/测试开发丨UI自动化测试用例结构分析

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26899 用例标题 搜狗搜索功能 前提条件 进入搜狗首页 用例步骤 1、输入;2、点击搜索 预期结果 1、搜索成功;2、搜索结果中包含 实际结果 自动化测试用例 作用 用例标题 测试包、

    2024年02月10日
    浏览(39)
  • 软件测试/测试开发丨Selenium Web自动化测试 高级控件交互方法

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27045 使用场景 对应事件 复制粘贴 键盘事件 拖动元素到某个位置 鼠标事件 鼠标悬停 鼠标事件 滚动到某个元素 滚动事件 使用触控笔点击 触控笔事件(了解即可) https://www.selenium.dev/documentati

    2024年02月09日
    浏览(92)
  • 软件测试/测试开发丨Web自动化 PageObject设计模式

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27167 马丁福勒个人博客 selenium 官网 无法适应 UI 频繁变化 无法清晰表达业务用例场景 大量的样板代码 driver/find/click 降低 UI 变化导致的测试用例脆弱性问题 让用例清晰明朗,与具体实现无关 字

    2024年02月10日
    浏览(47)
  • 软件测试/测试开发丨Selenium Web自动化多浏览器处理

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27185 用户使用的浏览器(firefox,chrome,IE 等) web 应用应该能在任何浏览器上正常的工作,这样能吸引更多的用户来使用 是跨不同浏览器组合验证网站或 web 应用程序功能的过程 是兼容性测试的一个

    2024年02月09日
    浏览(56)
  • 软件测试/测试开发/全日制/测试管理丨Web测试框架Selenium

    Selenium是一个用于自动化Web应用程序测试的开源框架,具有许多特点和优势,使其成为最受欢迎的Web自动化测试工具之一,是许多团队首选的Web自动化测试工具之一。 Selenium框架的特点包括: 跨浏览器支持:  Selenium支持多种浏览器,包括Chrome、Firefox、Edge、Safari等,使测试在

    2024年01月16日
    浏览(51)
  • Java开发手册之单元测试,软件测试端简单易用的SPI框架

    【推荐】编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量。 B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。 C:Correct,正确的输入,并得到预期的结果。 D:Design,与设计文档相结合,来编写单元测试。 E:Error,强制错误信息输

    2024年04月25日
    浏览(38)
  • 软件测试:功能测试-接口测试-自动化测试-性能测试-验收测试

    软件测试的主要流程 一、测试主要的四个阶段 1.测试计划设计阶段 :产品立项之后,进行需求分析,需求评审,业务需求评级,绘制业务流程图。确定测试负责人,开始制定测试计划; 2.测试准备阶段 :各成员编写测试用例、先小组内评审、后会议评审,测试样机和配件,

    2024年02月08日
    浏览(50)
  • 软件测试 -- 自动化测试(Selenium)

            在这里记录一下  自动化测试 -- Selenium 的一些基础知识点,只记录方法。 Selenium 浏览器操作 Selenium 元素定位(包含 Web 表单) findElement 和 findElements         findElement 和 findElements 都可以用于定位元素,它们都需要传入一个 By 类型,但是他们的返回值不同,区

    2024年04月22日
    浏览(53)
  • 【软件测试】自动化测试selenium

    目录 一、什么是自动化测试 二、Selenium介绍 1、Selenium是什么 2、Selenium的原理 三、了解Selenium的常用API 1、webDriver API   1.1、元素定位 1.1.1、CSS选择器 1.1.2、Xpath元素定位 1.1.3、面试题  1.2、操作测试对象 1.3、添加等待  1.4、打印信息  1.5、浏览器的操作 1.6、键盘事件 1.7、鼠

    2024年01月17日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包