前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AutoLine源码分析之调度管理器

AutoLine源码分析之调度管理器

作者头像
苦叶子
发布2018-08-06 14:42:48
4960
发布2018-08-06 14:42:48
举报
文章被收录于专栏:开源优测
代码语言:javascript
复制
什么是AutoLine开源平台

AutoLine开源平台是一个开源自动化测试解决方案,基于RobotFramework进行二次开发,支持RobotFramework几乎所有的库。

源码地址

github地址: https://github.com/small99/AutoLine 码 云 地 址:https://gitee.com/lym51/AutoLine

AutoLine采用了Apscheduler库来实现AutoLine的测试用例的执行任务的调度管理

什么是Apscheduler

APScheduler:Python下强大的任务调度工具,可以完成定时任务,周期任务等,它是跨平台的,用于取代Linux下的cron daemon或者Windows下的task scheduler。

Apscheduler内置三种调度调度系统:

  • Cron风格
  • 间隔性执行
  • 仅在某个时间执行一次

在AutoLine开源平台中,我们采用了cron风格的支持以实现自由灵活的调度控制

Apscheduler支持哪些存储方式

  • Memory
  • SQLAlchemy (any RDBMS supported by SQLAlchemy works)
  • MongoDB
  • Redis
  • RethinkDB
  • ZooKeeper

AutoLine开源平台采用了SQLAlchemy MySQL存储调度任务

下面我们一起看看AutoLine下对调度的封装源码:

源码结构如下

__init__ 你懂的 setup 初始化调度器 start 启动调度器 is_running 判断调度是否在运行 shutdown 关闭调度 load_job_list 载入所有项目任务 add_job 新增调度任务 update_job 更新调度任务 remove_job 移除调度任务 pause_job 暂停调度任务 resume_job 恢复调度任务 get_jobs 获取所有任务 print_jobs 在控制台输出所有任务

setup源码分析

setup主要用于配置Apscheduler启动时加载的配置

代码语言:javascript
复制
def setup(self):
    self.scheduler = BackgroundScheduler({
        # 设置调度任务存储mysql连接串
        'apscheduler.jobstores.default': {
            'type': 'sqlalchemy',
            'url': self.app.config["TRIGGER_DATABASE_URL"]
        },
        # 设置调度执行器进程池信息
        'apscheduler.executors.processpool': {
            'type': 'threadpool',
            'max_workers': '30'
        },
        # 设置调度其他配置
        'apscheduler.job_defaults.coalesce': 'false',
        'apscheduler.job_defaults.max_instances': '4',
        'apscheduler.timezone': 'UTC',
    })

load_job_list源码分析

用于加载所有设置了有效cron'表达式的项目进行自动调度,一般初始化启动时,调用一次即可

代码语言:javascript
复制
def load_job_list(self):
    with self.app.app_context():
        # 查询所有项目
        projects = AutoProject.query.all()
        
        for p in projects:
            if p.enable and self.scheduler.get_job(p.id) is None:
                cron = p.cron.replace("\n", "").strip().split(" ")
                # 判断cron表达式是否有效
                if len(cron) < 5:
                    continue
                # 新增任务
                j = self.scheduler.add_job(func=run_job, 
                    trigger='cron', 
                    name=p.name, 
                    replace_existing=True,
                    minute=cron[0], 
                    hour=cron[1], 
                    day=cron[2], 
                    month=cron[3],
                    day_of_week=cron[4],
                    id="%s" % p.id, 
                    args=(p.id,))
            else:
                self.update_job(p.id)

其他函数就不一一展示了,请直接查阅代码

最后附上Apscheduler的官方手册链接:http://apscheduler.readthedocs.io/en/latest/userguide.html

AutoLine开源平台简明教程

AutoLine开源平台安装部署教程

AutoLine开源平台常见问题解答

AutoLine开源平台源码组织结构

AutoLine源码分析之开始篇

AutoLine源码分析之入口源码

AutoLine源码分析之配置管理

AutoLine源码分析之数据库模型

AutoLine源码分析之Flask初始化模块

AutoLine源码分析之静态页面模板及对应API介绍

AutoLine源码分析之如何构建restful API

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源优测 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档