数据工厂系列(1)初始化后端项目

1,389 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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的基本使用方法

上篇-初始化

  1. 新建项目

这里我直接在github上创建的项目,然后把它拉取下来了,你们可以自行用pycharm创建即可

  1. 创建并激活虚拟环境
# 以下命令仅适用mac或linux,win小伙伴需要自行search哈~
# 在项目跟目录下执行
virtualenv venv
# 激活虚拟环境
source venv/bin/activate

记得pycharm里的解释器要换成虚拟环境的解释器

  1. 安装fastapi&&uvicorn
# 安装fastapi
pip3 install fastapi
# 安装uvicorn
pip3 install uvicorn
  1. 编写一个简单的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:让服务器在更新代码后重新启动。仅在开发时使用该选项
  1. 启动服务 我们直接在main.py里,右键运行即可

或者在控制台里,输入python3 main.py最终服务启动成功~

  1. 访问地址 浏览器直接访问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… 今天的代码也提交了哦,记得敲一下哦~