最近在写接口自动化平台的时候,一个功能是批量执行测试用例,即对一个测试集操作。
测试集的执行时间可能会较长,所以想做成一个异步任务。python 实现异步任务最常见的工具是celery,此次使用flask和celery完成了功能,将实践结果进行记录。
celery
Celery是Python开发的分布式任务调度模块,可以执行异步任务和定时任务。
详细内容可以查看官网的文档
安装
pip install celery
消息中间件
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。
celery支持的消息中间件很多,包括消息队列、关系型数据库和非关系型数据库。最常见的有RabbitMQ和Redis。RabbitMQ是官方推荐使用的,相比较于redis的一个好处是消息可以持久保存。
我使用的是RabbitMQ作为消息中间件。celery作为生产者将任务保存在消息队列中,之后由消费者者将队列中的任务进行消费。
任务执行单元
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
此处的worker其实就是一个消费者,从消息队列中获取消息并进行执行。
worker是需要单独启动的,并不是跟随flask一起启动的。
分布式的意思就是可以启动多个worker,像多个工人并发的进行工作。
任务结果存储
Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等。
由于在业务上我执行任务的功能有保存对应的执行结果在业务数据库表中,此处没有用到结果存储。
Flask-Celery-Helper
github地址
为了更加方便的flask进行集成,使用了flask-celery-helper这个库。
下面的例子也是基于这个库编写的。
使用这个库的原因除了更加方便的使用配置信息,更重要的是可以在celery中使用flask 上下文对象。
安装
pip install Flask-Celery-Helper
异步任务实现
以下只显示了celery相关的代码
config.py
from app.config.setting import BaseConfig
class DevelopmentSecure(BaseConfig):
"""
开发环境安全性配置
"""
CELERY_BROKER_URL = 'amqp://admin:admin2000@www.xxxxx.red:8083/my_vhost'
CELERY_BROKER_URL 是消息中间件RbbitMq的连接信息
init.py
from flask_celery import Celery
celery = Celery()
实例化celery对象
app.py
from app.libs.init import mongo
使用Flask和Celery实现接口自动化测试

最低0.47元/天 解锁文章
1238

被折叠的 条评论
为什么被折叠?



