干货:使用Fastapi开发自己的Mock server(附源码)

在这里插入图片描述
最近几天抽空看了下Fastapi的文档,顺便使用它开发了个HTTP(s)协议的Mock server。以后有需要用到挡板的地方,就可以直接使用啦。

项目一级目录:

干货:使用Fastapi开发自己的Mock server(附源码)_第1张图片

logs用来存放日志文件,日切

main:启动入口程序,直接运行

requirements.txt:依赖包
干货:使用Fastapi开发自己的Mock server(附源码)_第2张图片

common中存放日志模块,核心模块等公用部分。

干货:使用Fastapi开发自己的Mock server(附源码)_第3张图片

apis用来存放各个项目的挡板服务,各目录以项目为单位分开;每个项目目录下固定有三个文件夹:

api_operation:存放接收post、get等请求并返回Mock响应的代码。

config:存放Mock的匹配规则

responce_file:存放Mock响应的文件,json、txt.

注意:config下的配置文件名与responce_file要一一对应。

干货:使用Fastapi开发自己的Mock server(附源码)_第4张图片

api_operation的开发

import timefrom fastapi import APIRouter, Path, Queryfrom starlette.responses import FileResponsefrom starlette.requests import Requestfrom common.mock_responce import MockResponcefrom common.log_config import getlogerrouter = APIRouter()logger = getloger(name)@router.post("/v1/{url_path}")async def json_res(request: Request, url_path=Path(…, title=“The ID of the item to get”)): print(request.url) # query_args = request.query_params # logger.info(‘query_args:’, query_args) # logger.info(query_args.get(‘entInfo’)) # form_args = await request.form() # print(‘form_args:’, form_args) # print(form_args.get(‘entInfo’)) # byte_body = await request.body() # try: # import json # b_body = json.loads(byte_body.decode(‘UTF-8’)) # print(‘byte_body:’, b_body) # print(type(b_body)) # except: # b_body = byte_body.decode(‘UTF-8’) # print(‘byte_body:’, b_body) # print(type(b_body)) json_body = await request.json() return FileResponse(MockResponce(‘test_api’, ‘A001’, json_body).responce_filter())@router.post("/v1/txt")async def txt_res(request: Request): form_args = await request.form() return FileResponse(MockResponce(‘test_api’, ‘A002’, form_args).responce_filter())
通过request参数可以获取请求传进来的所有header、参数等;

参数通常有三种方法传进来:

1.url传参,query_args = request.query_params来获取

2.form-da传参,form_args = await request.form()来获取

3.body传参

你可能感兴趣的:(程序员,软件测试,IT,程序人生,测试工程师,软件测试,单元测试,python)