数据工厂系列(22)项目同步-上篇

28 阅读2分钟

大家好~我是小方,欢迎大家关注笋货测试笔记体完记得俾个like

回顾

在之前的篇章中,我们总算完成项目的"重构",接下来的几篇中,我们来进行项目同步的设计,这部分功能设计好之后,大概是长这样子的

Apidoc

数据工厂的核心就是Apidoc,简单来说,就是通过维护脚本里面的注释信息,然后执行apidoc命令,生成apidoc接口文档,通过解析接口文档的json数据,在前端展示脚本信息,执行脚本,更多的apidoc介绍可看:apidocjs.com/

  • 安装apidoc 由于apidoc依赖于包管理工具npm进行安装,所以安装之前先安装好node、npm
npm install -g apidoc@0.22

记得不要安装最新版本的,最新版本的会没有json数据

  • apidoc使用

我们先来维护一个脚本,具体维护如下:

这个脚本我维护成一个项目,项目地址:gitee.com/JokerChat/f…

整体目录如下:

# 去到项目中存放case目录里去
cd xxx/xxx/xxx/xxx/funcase/case
# 执行apidoc命令生成文档
apidoc -o ../doc

执行完之后,可以看到doc目录里面存放接口文档,打开index.html可以看到详细的接口信息,doc目录里还有个api_data.json文件,没错,我们主要核心是解析这个json文件的内容进入入库,当然这个入库不是简单的入库,是要有比对的入库,删除xx场景,新增xx场景,修改xx场景...

编写实现步骤

既然我们有了明确的目标,那我们先设计一下步骤吧~

  1. git pull 更新项目
  2. 执行apidoc命令,生成api_doc.json
  3. 解析apidoc数据
  4. apidoc数据与数据库数据比对,入库
  5. 处理生成同步消息

我们先来实现前面2个步骤吧,比较简单

代码实现

app/core/git.py新增pull方法

app/core/get_project_path.py新增获取项目路径相关方法

from app.commons.settings.config import FilePath
import os

class ProjectPath(object):

    @staticmethod
    def get(project_name: str, directory_name: str) -> (str, str):
        """
        获取项目路径和脚本路径
        :param project_name:项目名
        :param directory_name: 造数场景目录名
        :return: 项目目录,脚本目录
        """
        project_path = os.path.join(FilePath.BASE_DIR, project_name)
        if not os.path.isdir(project_path):
            raise Exception(f"找不到{project_name}这个项目")
        script_path = os.path.join(project_path, directory_name)
        if not os.path.isdir(script_path):
            raise Exception(f"找不到{directory_name}这个脚本目录")
        return project_path, script_path

新建app/core/api_doc_parse.py,新增ApiDocParse类,新增执行apidoc命令方法和读取doc/api_data.json数据 我们将读取doc/api_data.json数据,进行解析(清洗数据),然后再进行执行入库逻辑(后面清洗数据和入库逻辑下一篇展开讲讲)

接着在app/logic/project_logic/project_logic.py编写同步脚本逻辑

app/routers/project/apis/project_api.py引入该逻辑

app/routers/project/__init__.py新增同步逻辑接口

测试环节

总结

5个步骤中,我们今天才完成前面2个步骤,下篇的话,要把剩下的3个步骤补充完毕哦~今天就这样吧done