测试平台系列(71)|测试平台系列(71) Python定时任务方案
大家好~我是定时任务 定时任务,顾名思义: 定时执行的任务,可以是一段bash命令,也可以是一个脚本文件。通常用于我们需要在特定时刻做事情。米洛
!
我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程
,希望大家多多支持。
欢迎关注我的公众号测试开发坑货
,获取最新文章教程!
举个例子: 每晚8点执行全业务场景
接口自动化回归测试
,又或者每隔20分钟去你家QQ农场偷菜!Python的定时任务 如果是大中型公司,一定有对应的
平台
让大家接入。一般这样的平台的名字或者描述都是: 分布式任务调度平台
这样的。再不济还有jenkins满足我们的需求~想起博主以前"小时候"(刚工作的时候),公司既没有用
jenkins
,也没有这样的大平台可以接入。我是怎么做定时任务的呢?来看一段代码:
import time
from datetime import datetimedef func():
# 这个是定时任务要执行的ui/接口自动化方法
passdef 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执行
- 安装scheduler
pip install schedule
- 官网给出的例子
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算得上是咱们执行定时任务的不二之选了。由于篇幅的原因,今天的内容就介绍到这啦~
【测试平台系列(71)|测试平台系列(71) Python定时任务方案】
下一节我们就详细介绍ApScheduler在pity中的运用叭
。推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 【欢喜是你·三宅系列①】⑶
- 你不可不知的真相系列之科学
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 女生该不该用小号测试男朋友()
- BNC公链|BNC公链 | Eth2.0测试网Topaz已质押超100万枚ETH
- 2018-06-13金句系列7(金句结构-改编古现代诗词)
- Unity和Android通信系列文章2——扩展UnityPlayerActivity
- 乡野村趣系列之烧仙草
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)