案例6-YApi Python SDK开发
需求描述
假设YApi是你公司产品,或你们自动化需要经常与YApi平台进行交互,需要你开发一款Python库,并封装一下YApi平台的常用操作,如创建项目、新建接口、接口分类、添加用户、添加测试集合等等。例如
安装你的库后:
pip install python-yapi
可以使用以下方式来操作YApi平台
from python_yapi import YApi
yapi = YApi(base_url='http://localhost:3000')
yapi.login('admin@admin.com', 'ylme.org')
# 添加项目
project = yapi.add_project('Demo Project')
# ....
什么是SDK
SDK(Software development kit) 软件开发包,是软件或平台面向开发者的一种快速开发工具或套件,使开发者可以更方便、灵活的使用软件或平台功能。
一般(比较注重生态的)软件或平台会提供不同语言或平台或框架的包,来适用不同的开发者。例如Selenium就提供了Python、Nodejs、Java等各种软件的SDK,这也是其比较流行的原因之一。
sdk的使用方式可以自己设计,最好简单易用
参考常见平台Python版本sdk使用方式:
YApi安装参考
Windows部署YApi
- 安装mongodb 默认安装(安装较慢)- 安装包见群文件
- 安装node 14 默认安装 - 安装包见群文件
- 打开命令行执行
npm install -g yapi-cli --registry https://registry.npm.taobao.org
- 安装完 命令行运行
yapi server
- 打开 http://localhost:9090/ 选一个版本(我选的1.12),填一个 企业名称,其他不变-点击部署(等待部署完 忽略node-gyp错误)
- 打开命令行cd 进入用户目录下的 my-yapi目录,运行
node vendors/server/app.js
- 访问 http://localhost:3000 点击登录 默认用户名admin@admin.com / ymfe.org
MacOS部署YApi
- 安装nvm (用于安装管理多个版本的node)
brew install nvm
安装好后根据提示将需以下配置添加到你的命令行配置文件中(我的是~/.zhsrc
)
vim ~/.zshrc
, 在末尾添加如下配置:
export NVM_DIR="$HOME/.nvm"
[ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh" # This loads nvm
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
然后执行source ~/.zshrc
使配置生效。
使用nvm安装并切换到node10.24.1
nvm install 10.24.1
nvm use 10.24.1
使用node -v
查看版本。
- 安装mongodb
brew tap mongodb/brew
brew install mongodb-community
如果
brew tap mongodb/brew
添加失败可以考虑执行sudo chown -R "$USER":admin /usr/local
来修改下/usr/local
的权限。
安装后启动mongodb
brew services start mongodb-community
如果需要操作mongodb数据库,可以安装monogdb shell:
brew install mongodb-community-shell
- 安装yapi-cli
npm install -g yapi-cli --registry https://registry.npm.taobao.org
- 安装完 命令行运行
yapi server
启动安装服务
5. 打开 http://localhost:9090/ 选一个版本(我选的1.12),填一个 企业名称,其他不变-点击部署(等待部署完 忽略node-gyp错误)
安装时如果遇到:Error: getaddrinfo ENOTFOUND yapi.demo.qunar.com yapi.demo.qunar.com:80
找到npm全局包路径
npm root -g
例如,我的是:/Users/superhin/.nvm/versions/node/v14.21.3
在里面的/lib下面找到yapi-cli目录,cd进入yapi-cli目录,修改server.js
cd <你的npm全局包路径>/lib/yapi-cli
vim src/commands/server.js
注释调日志上报部分如下图(注意⚠️ js用//
注释)
- 打开命令行cd 进入用户目录下的 my-yapi目录,运行
node vendors/server/app.js
启动服务。
- 访问 http://localhost:3000 点击登录 默认用户名admin@admin.com / ymfe.org
提示
- 可以通过浏览器抓包不同操作接口并结合requests封装接口来实现不同操作
- YApi提供了两套接口,一是基于Cookie/Session授权机制的平台操作,另外是单个项目的基于token的开放api,这里可以只用第一种。
- 可以基于requests.session()来封装并保留登录后的会话,已使得其他操作(带授权)可以正常进行
参考依赖库
- requests
主要练习点
- 授权处理及业务接口封装
- 软件打包及发布
项目结构
- 可以使用
cookiecutter
通过模板生成Python项目结构
安装cookiecutter
python3 -m pip install cookiecutter
使用模板创建Python项目
python3 -m cookiecutter https://github.com/audreyr/cookiecutter-pypackage
根据命令行提示、输入项目基本信息,并选择即可。
示例如下:
python3 -m cookiecutter https://github.com/audreyr/cookiecutter-pypackage
You've downloaded /Users/superhin/.cookiecutters/cookiecutter-pypackage before. Is it okay to delete and re-download it? [yes]: yes
full_name [Audrey Roy Greenfeld]: Han Zhichao # 作者全名
email [audreyr@example.com]: superhin@126.com # 作者邮箱
github_username [audreyr]: hanzhichao # 作者 github用户名
project_name [Python Boilerplate]: python-yapi # 项目名称
project_slug [python_yapi]: # 包名称
project_short_description [Python Boilerplate contains all the boilerplate you need to create a Python package.]: YApi python sdk # 项目描述
pypi_username [hanzhichao]: # 作者pypi用户名(用于发布)
version [0.1.0]: # 项目当前版本
use_pytest [n]: y # 使用使用三方包pytest
use_black [n]: y # 是否使用三方包black (代码格式化工具)
use_pypi_deployment_with_travis [y]: # 是否使用travis (持续集成工具)
add_pyup_badge [n]: y # 是否添加pypi状态小标签
Select command_line_interface: # 选择命令行接口工具
1 - Click # 使用三方包click
2 - Argparse # 使用内置包argparse
3 - No command-line interface # 不添加命令行接口
Choose from 1, 2, 3 [1]: 2
create_author_file [y]: y # 是否创建作者说明文件
Select open_source_license: # 选择开源协议
1 - MIT license
2 - BSD license
3 - ISC license
4 - Apache Software License 2.0
5 - GNU General Public License v3
6 - Not open source
Choose from 1, 2, 3, 4, 5, 6 [1]: 1
Sphinx 自动生成Api文档参考:https://sphinx-apidoc.readthedocs.io/zh_CN/latest/gettingstarted/genapi.html