持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
大家好~我是小方,欢迎大家关注笋货测试笔记体完记得俾个like呀
背景
以前在测试团队维护着一个小小的造数平台(fastapi),将造数脚本进行api化,然后用fastapi自带的swagger文档进行请求,没有web页面,及其不方便,加上写造数脚本相当于写成了一个接口,对于不太熟悉fastapi的同学debug起来极其困难。综上所述,开发数据工厂,将平台与造数脚本进行解耦,采用apidoc生成脚本入参出参数据,生成web界面,动态导包作为核心执行方法~
分享缘由
现在满大街都是接口测试平台,数据工厂类似的平台少之又少,emmmm,那就分享自己做的数据工厂吧···具体可看我之前在TesterHome上发的帖子:吐槽帖子
数据工厂流程
整个实现比较简单,大家可以看看流程图
功能清单
功能的话,大概是以下这些,整体而言,数据工厂比较简单,没有接口平台那么复杂
说明
- 后端接口
- Python语言的fastpi
- 前端框架
- Vue + element ui,开箱即用的项目vue-admin-template
- 数据库
- MySQL
项目命名
对了,数据工厂就叫FunDataFactory吧~寓意是大家可以开开心心在数据工厂上进行造数据,对了Fun也跟Fang差不多发音哦,嘻嘻···
- 项目地址
鸣谢
- 无敌哥
- 感谢无敌哥前期的大力支持,提供了数据工厂的思路👍🏻
- BlueMoon-Mh公司
- 感谢领导们的支持,感谢MH测试团队小伙伴的大力支持,有你们的建议,MhDataFactory才变得更好~
接上篇
上篇我们讲到了后端服务采用的是fastapi后端框架,有关fastapi的教程可以看看官网上的例子,比较容易上手,比flask还毛坯的毛坯房···fastapi入门
前期准备
- IDE
- pycharm
- Python
- python 3.9(我用的是3.9版本,最好保持一致)
- git
- git命令掌握(如果不想敲git命令,最好下载个Sourcetree,比较方便)
- 虚拟环境
- 掌握虚拟环境venv的基本使用方法
上篇-初始化
- 新建项目
这里我直接在github上创建的项目,然后把它拉取下来了,你们可以自行用pycharm创建即可
- 创建并激活虚拟环境
# 以下命令仅适用mac或linux,win小伙伴需要自行search哈~
# 在项目跟目录下执行
virtualenv venv
# 激活虚拟环境
source venv/bin/activate
记得pycharm里的解释器要换成虚拟环境的解释器
- 安装fastapi&&uvicorn
# 安装fastapi
pip3 install fastapi
# 安装uvicorn
pip3 install uvicorn
- 编写一个简单的web服务
项目根目录下新建main.py文件
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == '__main__':
uvicorn.run(app='main:app', host="0.0.0.0", port=8080, reload=True)
@app.get("/")是一个装饰器,代表着root函数与/路由绑定起来,当访问到/时,就会执行下面的函数,async代表着该函数为一个异步函数。
uvicorn.run(app='main:app', host="0.0.0.0", port=8080, reload=True)含义如下:
- main:main.py 文件(一个 Python「模块」)。
- app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
- host:启动服务的ip,0.0.0.0代表任何都可以访问
- port:服务的端口
- reload:让服务器在更新代码后重新启动。仅在开发时使用该选项
- 启动服务
我们直接在
main.py里,右键运行即可
或者在控制台里,输入
python3 main.py最终服务启动成功~
- 访问地址
浏览器直接访问
http://127.0.0.1:8080看到这段信息,代表刚才的root函数执行成功
或者访问
http://127.0.0.1:8080/docs,即可看到自带的swagger文档
中篇-项目目录改造
我们先在项目跟目录底下创建app目录和logs目录以及config.py文件,接着在app目录下分别创建core目录、curd目录、models目录、routers目录、utils目录。新建时记住除了logs目录选择Directory,其他新建的目录都选择Python Package
调整后的目录结构如图~
- app:这个参考了flask的蓝图,项目的主要功能实现
- core:核心的执行方法
- curd:与数据库交互的实现方法
- models:存放表的模型
- routers:各个模块的路由
- utils:通用工具类
- logs:存放日志文件
- config.py:项目的配置文件
下篇-添加配置文件
在config.py里添加以下配置
import os
#fastapi 启动配置文件
class Config(object):
"""配置类"""
#数据库连接信息
HOST = "127.0.0.1"
PORT = "3306"
PWD = "root"
USER = "root"
DBNAME = "fun"
# 数据库配置
SQLALCHEMY_DATABASE_URI: str = f"mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DBNAME}"
class Text(object):
"""描述配置"""
TITLE = "Fun数据工厂"
VERSION = "v1.0"
DESCRIPTION = "欢迎来到方总的数据工厂"
class FilePath(object):
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 后端服务项目目录
LOG_FILE_PATH = os.path.join(BASE_DIR, "logs") # 日志文件路径
if not os.path.isdir(LOG_FILE_PATH): os.mkdir(LOG_FILE_PATH)
LOG_NAME = os.path.join(LOG_FILE_PATH, 'FunDataFactory.log')
最终篇-改造main.py
在上篇里,我们的初始化APP(FastAPI() 创建的对象)、路由函数和启动服务都是统一放在main.py文件里,比较杂乱无章,不然就是一堆屎山了为此,我们需要进行分层设计~
- 在
/app/init.py文件里,初始化APP,设置swagger文档的标题、版本和描述信息
from fastapi import FastAPI
from config import Text
fun = FastAPI(title=Text.TITLE, version=Text.VERSION, description=Text.DESCRIPTION)
- 在
main.py文件引入fun这个app
from app import fun
@fun.get("/")
async def root():
return {"message": "Hello World"}
- 项目根目录下新建
runserver.py文件,引入uvicorn并启动后端服务
import uvicorn
if __name__ == '__main__':
uvicorn.run(app='main:fun', host="0.0.0.0", port=8080, reload=True)
如何启动,可以回头看一下上篇第5个步骤~
下图就是启动成功的~
- 浏览器访问
http://127.0.0.1:8080/docs或者http://127.0.0.1:8080
总结
今天讲解了后端项目的初始化,目录整理后,项目结构比较清晰,项目地址:github.com/JokerChat/F… 今天的代码也提交了哦,记得敲一下哦~