AutoLine源码分析之调度管理器

什么是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启动时加载的配置

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'表达式的项目进行自动调度,一般初始化启动时,调用一次即可

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

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2018-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

在linux下安装w3af和使用

技术交流,请勿用于违法途径,后果自负 一、环境: sudoapt-get install git Python 2.7,大部分的linux都默认安装 sudoa...

40590
来自专栏Python爬虫与数据挖掘

安装完Python之后,如何设置Python环境变量

人生苦短,我用Python。最近有许多加群的萌新在咨询Python安装的事宜,Python安装问题不大,可以戳这篇文章:。本以为安装Python之后就可...

19120
来自专栏架构师之路

进程内缓存,究竟怎么玩?

除了常见的redis/memcache等进程外缓存服务,缓存还有一种常见的玩法,进程内缓存。

18230
来自专栏ionic3+

【技巧】ionic多环境配置

这种方式稍显麻烦,也容易误操作,而比较优雅的方式是通过配置文件和命令行参数结合来实现。

22620
来自专栏LanceToBigData

linux(十四)之linux NFS服务管理

学到这里差不多就结束了linux的基础学习了,其实linux的内容并不难,我们要经常的反复的去操作它,多多和它去联络感情才能很好的掌握这个linux。 加油!今...

475100
来自专栏linux驱动个人学习

高通GPIO驱动(DTS方式)

gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态; ...

61840
来自专栏IT 指南者专栏

Maven 项目管理工具基础入门系列(二)

? 一、前言 Maven 项目管理工具基础系列(一) 这篇文章中,我们已经初步了解了 Maven,也知道了使用 Maven 作为项目管理工具的好处,特别是已经...

38390
来自专栏zaking's

走近webpack(0)--正文之前的故事

  在前端工作的过程中,只要你接触过vue,angular,react,gulp就一定知道webpack或者听说过或者使用过webpack,但是或许你对webp...

29740
来自专栏Linyb极客之路

Nginx代理功能与负载均衡详解

Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负...

15020
来自专栏张戈的专栏

Linux:10个实用的网络和监控命令

本文列出了 10 个基础的每个 Linux 用户都应该知道的网络和监控命令。网络和监控命令类似于这些: hostname, ping, ifconfig, iw...

44930

扫码关注云+社区

领取腾讯云代金券