前两天领导看我摸鱼严重,喊我去做核心业务的接口自动化,从网上看了几篇教程最终决定使用 pytest+yaml 的方案。
因为只做核心业务,一个 case 需要使用几个到十几个接口,所以我将接口信息 (url、header、method、param 等) 放到 yaml 中,用的时候读取出来。
写了几个接口后,感觉身心俱疲,像搬运工一样,把接口信息从 swagger 搬到 yaml 文件。
于是我开始网上冲浪,看看有没有简单一点的办法,可以解决我搬运工困境。
然后被我找到了一个 openapi 转 python client 的项目:https://github.com/openapi-generators/openapi-python-client
试用了下,是我期望的效果,可以将 swagger 转为可以直接调用的代码,官方示例如下:
from {{ package_name }}.models import MyDataModel
from {{ package_name }}.api.my_tag import get_my_data_model
from {{ package_name }}.types import Response
with client as client:
my_data: MyDataModel = get_my_data_model.sync(client=client)
# or if you need more info (e.g. status_code)
response: Response[MyDataModel] = get_my_data_model.sync_detailed(client=client)
使用这个项目会生成直接调用的 api:get_my_data_model
还会生成入参模型: MyDataModel
甚至还有 api 的同步/异步调用,非常 nice
但是作为一个新手,我不太喜欢 client 作为传参传入 api 发送请求方法中,我想直接使用 client 调用 api。
于是我开始改改改
因为原项目提供了模版替换功能,所以我只需要一点点的变动,就实现了我想要的效果:
# 伪代码
from {{ package_name }}.models import loginDto
from {{ package_name }}.api.login import login
from {{ package_name }} import Client
client = Client(base_url="")
login_resp = client.login.sync_detailed(loginDto(username="admin", password="123456"))
# 直接获取json响应
login_resp = client.login.sync_detailed(loginDto(username="admin", password="123456")).json()
同原项目的区别:
欢迎有需求的小伙伴试用:
https://github.com/Renskk/openapi-to-python-client