大家好~我是米洛

我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持。

欢迎关注我的公众号测试开发坑货,获取最新文章教程!

定时任务

定时任务,顾名思义: 定时执行的任务,可以是一段bash命令,也可以是一个脚本文件。通常用于我们需要在特定时刻做事情。

举个例子: 每晚8点执行全业务场景接口自动化回归测试,又或者每隔20分钟去你家QQ农场偷菜!

Python的定时任务

如果是大中型公司,一定有对应的平台让大家接入。一般这样的平台的名字或者描述都是: 分布式任务调度平台这样的。再不济还有jenkins满足我们的需求~

想起博主以前"小时候"(刚工作的时候),公司既没有用jenkins,也没有这样的大平台可以接入。我是怎么做定时任务的呢?

来看一段代码:

import time
from datetime import datetime def func():
# 这个是定时任务要执行的ui/接口自动化方法
pass def main():
while True:
# 获取当前时间
now = datetime.now()
if now.hour == 20 and now.minute == 0:
# 当时间到达晚上8点0分,我们就开始跑自动化任务啦
print("任务开始执行")
func()
time.sleep(60) if __name__ == "__main__":
main()

不知道现在是否还有人依然用着这样的方式定时执行自动化测试,既然都2021年了,那咱们还是先进点吧。那么定时任务在Python中要怎么做呢?接着看。

几种常见的方案

schedule

如果你只是上面提到简单诉求,那我建议直接使用schedule库。这个库我个人感觉是小学生版本的升级版,对于我那种局限的sleep任务做了一些扩展:

  • 支持了按周期执行任务
  • 执行时间阅读起来更人性化
  • 还支持星期X执行

  1. 安装scheduler
pip install schedule
  1. 官网给出的例子
import schedule
import time # 定义一个执行方法
def job():
print("I'm working...") # 每10分钟执行一次job
schedule.every(10).minutes.do(job)
# 每小时执行一次job
schedule.every().hour.do(job)
# 每天10:30执行job
schedule.every().day.at("10:30").do(job)
# 每个星期一执行一次
schedule.every().monday.do(job)
# 每个星期三的13:15执行一次
schedule.every().wednesday.at("13:15").do(job)
# 在每分钟的17秒执行一次
schedule.every().minute.at(":17").do(job) while True:
# 进入schedule循环
schedule.run_pending()
time.sleep(1)

可以看出,api十分简单,语义也很清晰。基本可以满足我们的需求了~如果我们只是要定时去做某些事情的话,我想这个库非常human。

Jenkins

这个工具相比大家都有所了解吧~jenkins是一个比较强大的软件了,它可以打通git/svn,也支持定时任务等。有着丰富的插件,比如邮件,是一套完整的CI/CD解决方案。对于任务的执行结果的记录,也是可追溯的。估计唯一的缺点就是,引入了额外的系统。可能本身我只是一个自动化测试框架,现在却要搭建一套jenkins。

如果大家有代码改动->执行定时任务类似的需求,又需要完善的权限控制系统的话,那jenkins会是你的不二选择。

Celery

我对这家伙了解的不太多,但python+celery仿佛成了一个固定搭配。不知道我理解的对不对:

celery是一个任务队列,你可以制定好任务执行的规则,放入队列中,会有专门的消费端来帮你执行这些任务。

说到这里就不得不提到持久化了~

题外话之持久化

什么是持久化呢?通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)

我们可以把数据放到文件里,也可以放到数据库(实际上也是磁盘里)进行持久性保存。

这样做的目的: 数据可以存储,下次也还能拿到这些数据。这里面的内容太多了,打算后面再开一节来讲。

我们在Python里面的变量啊,这些数据都是存放在内存当中的,所以我们刚才的schedule是不支持持久化的。(也可能是我没研究到)

那jenkins支持吗?他是支持的,你想,你建立一个项目,里面有一些job的配置,什么时候执行,执行了干嘛,最后保存。

上述就是一个持久化的过程。

你保存了数据以后,下次能够获取到这个项目的任务信息,也就是说你哪怕重启了jenkins,任务依然存在

说明任务本身作为了一条数据,持久地保存了起来。

ApScheduler

"APScheduler是一个Python库,可让您安排稍后要执行的Python代码,只需一次或定期执行。您可以根据您添加新的作业或删除旧的旧作业。如果您在数据库中存储工作,他们还将存活调度程序重新启动并保持状态。重新启动调度程序时,它将运行它在脱机1时应该运行的所有作业。"

这是摘自ApScheduler官网的介绍,总体来说它支持对任务的增删改查(持久化),也能很好地支撑定时任务的执行。它相对来说比较轻量,不像celery那么复杂,也不像schedule那么简陋。由于我们不打算引入jenkins,所以总体来说,ApScheduler算得上是咱们执行定时任务的不二之选了。

由于篇幅的原因,今天的内容就介绍到这啦~

下一节我们就详细介绍ApScheduler在pity中的运用叭

测试平台系列(71) Python定时任务方案的更多相关文章

  1. 测试平台系列(72) 了解ApScheduler基本用法

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们调研了一下市面上 ...

  2. 测试平台系列(85) 把redis运用到实战中

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们让支持了前置条件 ...

  3. 测试平台系列(95) 前置条件支持简单的python脚本

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们构思了一下怎么去支 ...

  4. 测试平台系列(94) 前置条件该怎么支持Python呢

    回顾 上一节我们狠狠操练了一番oss,但我们的任务还很长久,所以我们需要继续打磨我们的功能. 那今天就让我们来思考下,如何在前置条件支持python脚本,多的不说,我们也暂时不考虑其他语言,因为光考虑 ...

  5. 测试开发系列之Python开发mock接口(一)

    什么是mock接口呢,举个栗子,你在一家电商公司,有查看商品.购物.支付.发 货.收获等等等一大堆功能,你是一个测试人员,测测测,测到支付功能的时候,你就要调用第三方支付接口了,真实支付,直接扣你支付 ...

  6. 测试开发系列之Python开发mock接口(三)

    于进入主题了,前面的准备工作都已经做好了,下面就开始写逻辑的代码了,代码我已经写好了,每行都加了注释,不明白的可以留言.   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...

  7. 测试平台系列(82) 解决APScheduler重复执行的问题

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们编写了在线执行R ...

  8. 测试平台系列(83) 前置条件支持Redis语句

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上节我们打了个野,解决了一 ...

  9. 测试平台系列(1) 搭建Flask服务

    搭建Flask服务 项目地址 点我进入项目地址 代码都会在这里有所展示,喜欢的话可以帮点个star,谢谢大家了!如果你喜欢该教程,也可以分享给其他人. 关于选型 想了很久,本来打算用「Gin」做为后端 ...

随机推荐

  1. Shell系列(22)- 字符截取命令awk

    简介 awk是一个数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个"字段"来处理 awk的流程是依次读取每一行数据,读取完一行数据后,进行条件判断 ...

  2. LeetCode2-链表两数和

    目录 LeetCode2-链表两数和 题目描述 示例提示 经验教训 参考正解 题目描述 示例提示 经验教训 链表题的判空条件不是万能的,有时候示例会极其复杂,根本难以通过判空来区分不同情况. /** ...

  3. 启动jemeter 报错相关解决方案

    1:当启动jemeter时报错"页面文件太小,无法完成操作" 如图: 是说明分配的内容不足,即可调整内存重启即可解决 1):打开:控制面板>系统和安全>系统 2):点击 ...

  4. Orchard Core 配置项说明

    Orchard Core使用IShellConfiguration扩展了ASP.NET Core IConfiguration,以允许在应用程序范围的配置之上进行特定于租户的配置.虽然本文档使用Orc ...

  5. P4884-多少个1?【BSGS】

    正题 题目链接:https://www.luogu.com.cn/problem/P4884 题目大意 求一个最小的\(n\)使得\(n\)个连续的\(1\)其在模\(m\)意义下等于\(k\). \ ...

  6. 三步搞定IDEA集成热部署

    第一步.在你的SpringBoot项目中添加DevTools依赖 <!-- 热部署DevTools --> <dependency> <groupId>org.sp ...

  7. 浅谈机(J)惨(C)技巧——从入门到精通(?)

    JC总是无聊的机房中有意思的一个瞬间... 比如: 这个杰作由 ZSWBWYX 完成 你认为这只是AK-IOI吗?不!注意用户名...也是此人的杰作. 所以,在险恶的机房里,一定要保护好自己的账号. ...

  8. 地形鞍部的提取(ArcPy实现)

    1.背景 相邻两山头之间呈马鞍形的低凹部分称为鞍部.鞍部点是重要的地形控制点,它和山顶点.山谷点及山脊线.山谷线等构成地形特征点线,对地形具有很强的控制作用.因此,因此,对这些地形特征点.线的分析研究 ...

  9. THUSC & 中考 & NOI 拉跨记

    THUSC 的拉胯记 时代比较久远了,可能有些事情记不清楚了. Day -\(\infty\) 本来说只有我.llsw.wxk过了审核,后来wy.lyc也搞了个体验营名额,于是和高二的一起集训. Da ...

  10. 数据库已经存在表, django使用inspectdb反向生成model实体类

    1.通过inspectdb处理类,可以将现有数据库里的一个或者多个.全部数据库表生成Django model实体类 python manage.py inspectdb --database defa ...