兴仁市建设局网站,的建站网站,建设设计网站公司,怎样做好企业文化建设本章介绍使用DjCelery即DjangoCelery框架开发定时任务功能#xff0c;在Autotestplat平台上实现单一接口自动化测试脚本、业务场景接口自动化测试脚本、App自动化测试脚本、Web自动化测试脚本等任务的定时执行、调度、管理等#xff0c;从而取代Jenkins上的定时执行脚本和发送…
本章介绍使用DjCelery即DjangoCelery框架开发定时任务功能在Autotestplat平台上实现单一接口自动化测试脚本、业务场景接口自动化测试脚本、App自动化测试脚本、Web自动化测试脚本等任务的定时执行、调度、管理等从而取代Jenkins上的定时执行脚本和发送邮件等功能。**
自动化测试逻辑流程图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 github.com/MicrosoftAr…
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所示界面。 ▲图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 relstylesheettypetext/css href/static/admin/css/forms.css /
script typetext/javascriptsrc/admin/jsi18n//script
script typetext/javascriptsrc/static/admin/js/vendor/jquery/jquery.js/script
script typetext/javascriptsrc/static/admin/js/jquery.init.js/script
script typetext/javascriptsrc/static/admin/js/core.js/script
script typetext/javascriptsrc/static/admin/js/admin/RelatedObjectLookups.js/script
script typetext/javascriptsrc/static/admin/js/actions.js/script
script typetext/javascriptsrc/static/admin/js/urlify.js/script
script typetext/javascriptsrc/static/admin/js/prepopulate.js/script
script typetext/javascriptsrc/static/admin/js/vendor/xregexp/xregexp.js/script
meta nameviewportcontentuser-scalableno, widthdevice-width, initial-scale1.0,maximum-scale1.0
link relstylesheettypetext/css href/static/admin/css/responsive.css/
meta namerobotscontentNONE,NOARCHIVE /
/head
body roledocument
!-- 导航栏--
nav classnavbar navbar-expand-smbg-dark navbar-dark fixed-top
div
ahref#nbsp;/a
ul
/ul
ul
liastylecolor:white href#/a/li
liastylecolor:white href/logout//a/li
/ul
/div
/nav
!-- 搜索栏--
divstylepadding-top: 70px;
formmethodget action/tasksearch/
{% csrf_token %}
input typesearchnametask placeholder名称 required
button typesubmit搜索/button
!-- 增加定时任务--
div stylefloat:right;width:73%
select namePeriodicTaskidPeriodicTask
option value selected----定时任务----/option
/select
a idchange_id_PeriodicTaskdata-href-template/admin/djcelery/periodictask/fk/change/?_to_fieldidamp;_popup1title更改选中的定时任务
imgsrc/static/admin/img/icon-changelink.svg alt修改/
/a
a stylecolor:light blue idadd_id_PeriodicTask href/admin/djcelery/periodictask/add/?_to_fieldidamp;_popup1title增加另一个测试用例
imgsrc/static/admin/img/icon-addlink.svg alt增加/增加
/a
/form
/div
!-- 任务计划列表--
divstylepadding-top: 20px;
div
table classtable table-striped
thead
tr
thID/thth任务名称/thth任务模块/thth时间计划/thth修改时间/thth开启/thth立即/thth编辑/thth删除/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
tda stylecolor:green每{{ periodic.period }} {{ periodic.every}}次/a/td
td{{ task.date_changed }}/td
td{{ task.enabled }}/td
td{% if task.id 1 %}
a href../task_apistargetmainFrame运行/a
{% elif task.id 2 %}
a href../task_apitesttargetmainFrame运行/a
{% else %}
{% endif %}
/td
tda stylecolor:light blueclassrelated-widget-wrapper-link add-relatedidadd_id_Apitest href../admin/djcelery/periodictask/{{task.id }}/change/?_to_fieldid_popup1imgsrc/static/admin/img/icon-changelink.svg//a/td
tda stylecolor:light blueclassrelated-widget-wrapper-link add-related idadd_id_Apitesthref../admin/djcelery/periodictask/{{ task.id}}/delete/?_to_fieldid_popup1imgsrc/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
tda stylecolor: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
tda href../task_apistargetmainFrame运行/a/td
tda stylecolor:light blueclassrelated-widget-wrapper-link add-relatedidadd_id_Apitest href../admin/djcelery/periodictask/{{task.id }}/change/?_to_fieldid_popup1imgsrc/static/admin/img/icon-changelink.svg//a/td
tda stylecolor:light blueclassrelated-widget-wrapper-link add-relatedidadd_id_Apitest href../admin/djcelery/periodictask/{{task.id }}/delete/?_to_fieldid_popup1imgsrc/static/admin/img/icon-deletelink.svg//a/td
{% else %}
{% endif %}
{% endfor %}{% endfor %}{% endfor %}
/tbody
/table
/div
/div
span styleposition:absolute;right:100px; bottom:30px; {# 把翻页功能固定显示在右下角#}
div styleposition:absolute; right:100px; width:100px;
trth总数/thtd{{ taskcounts }}/td/tr {# 前端读取定义的变量#}
/div
div
lt;ulclasspagination idpagergt;{#上一页链接开始#}{%if tasks.has_previous %}{# 如果有上一页则正常显示上一页链接#}lt;ligt;lt;ahref/periodic_task/?page{{ tasks.previous_page_number }}gt;上一页lt;/agt;lt;/ligt; {# 上一页标签 #}{%else %}lt;li classprevious disabledgt;lt;ahref#gt;上一页lt;/agt;lt;/ligt;{# 如果当前不存在上一页则上一页的链接不可单击#}{%endif %}{# 上一页链接开始#}{%for num in tasks.paginator.page_range %}{% if num currentPage %}lt;ligt;lt;a href/periodic_task/?page{{ num }}gt;{{ num}}lt;/agt;lt;/ligt; {#显示当前页数链接#}{% else %}lt;liclassitemgt;lt;a href/periodic_task/?page{{ num}}gt;{{ num }}lt;/agt;lt;/ligt;{% endif %}{% endfor %}{# 下一页链接开始#}{% if tasks.has_next %} {# 如果有下一页则正常显示下一页链接#}lt;liclassnextgt;lt;a href/periodic_task/?page{{tasks.next_page_number }}gt;下一页lt;/agt;lt;/ligt;{% else %}lt;ligt;lt;a href#gt;下一页lt;/agt;lt;/ligt;{% endif %}{# 下一页链接结束#}lt;/ulgt;/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页currentPageint(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, )# 读取浏览器登录Sessionsearch_name request.GET.get(task, )task_list PeriodicTask.objects.filter(task__icontainssearch_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;ligt;lt;a href../periodic_tasktargetmainFramegt;lt;iclassglyphicon glyphicon-firegt;lt;/igt;任务计划 lt;/agt;lt;/ligt;lt;trgt;lt;tdgt;amp;nbsp;lt;/tdgt;lt;/trgt;
查看前端页面效果如图11.3所示。 ▲图11.3
行动吧在路上总比一直观望的要好未来的你肯定会感 谢现在拼搏的自己如果想学习提升找不到资料没人答疑解惑时请及时加入扣群 320231853里面有各种软件测试开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你