# apiAutoTest **Repository Path**: li-wenliang/api-auto-test ## Basic Information - **Project Name**: apiAutoTest - **Description**: Pytest+allure+jsonpath+requests接口自动化测试框架 实现功能 测试数据隔离: 测试前后进行数据库备份/还原 接口直接的数据依赖: 需要B接口使用A接口响应中的某个字段作为参数 对接数据库: 讲数据库的查询结果可直接用于断言操作 动态多断言: 可(多个)动态提取实际预期结果与指定的预期结果进行比较断言操作 自定义扩展方法: 在用例中使用自定义方法(如:获取当前时间戳...)的返回值 邮件发送:将allure报告压缩后已附件形式发送 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 4 - **Created**: 2021-04-10 - **Last Updated**: 2024-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # apiAutoTest > 使用Python为语言工具 + Python第三方库 实现的接口自动化测试工具 ## 实现功能 - 测试数据隔离: 测试前后进行数据库备份/还原 - 接口直接的数据依赖: 需要B接口使用A接口响应中的某个字段作为参数 - 对接数据库: 讲数据库的查询结果可直接用于断言操作 - 动态多断言: 可(多个)动态提取实际预期结果与指定的预期结果进行比较断言操作 - 自定义扩展方法: 在用例中使用自定义方法(如:获取当前时间戳...)的返回值 - 邮件发送:将allure报告压缩后已附件形式发送 ## 依赖库 ``` allure-pytest==2.8.17 # allure报告 jsonpath==0.82 # json解析库 loguru==0.5.1 # 日志库 pytest==6.0.1 # 参数化 PyYAML==5.3.1 # 读取ymal requests==2.24.0 # 请求HTTP/HTTPS xlrd==1.2.0 # 读取excel yagmail==0.11.224 # 发送邮件 PyMySQL==0.10.1 # 连接mysql数据库 pytest-rerunfailures==9.1.1 # 用例失败重跑 paramiko==2.7.2 # SSH2 连接 ``` ## 目录结构 ```shell ├─api │ └─base_requests.py # 请求封装 ├─backup_sqls │ └─xxx.sql # 数据库备份文件 ├─config │ └─config.yaml # 配置文件 ├─data │ └─test_data.xlsx # 用例文件 ├─log │ └─run...x.log # 日志文件 ├─report │ ├─data │ └─html # allure报告 ├─test │ ├─conftest.py # 依赖对象初始化 │ └─test_api.py # 测试文件 ├─tools # 工具包 │ ├─__init__.py # 常用方法封装 │ ├─data_clearing.py # 数据隔离 │ ├─data_process.py # 依赖数据处理 │ ├─db.py # 数据库连接对象 │ ├─hooks.py # 自定义扩展方法(可用于用例)文件 │ ├─read_file.py # 用例、配置项读取 │ └─send_email.py # 邮件发送、报告压缩 ├─项目实战接口文档.md # 配套项目相关接口文档 ├─requirements.txt # 项目依赖库文件 └─run.py # 主启动文件 ``` ## 安装教程 1. git clone https://gitee.com/li-wenliang/api-auto-test.git 2. 安装Java与allure 3. 使用pycharm打开项目使用Terminal 输入 python3 -m venv venv 新建虚拟环境 (可选) 4. 执行pip install -r requirements.txt 安装依赖库(若下载超时:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt) 5. 修改config.ymal文件中email文件配置邮箱,request_header配置初始请求头,database 配置数据库信息 6. 运行 `run.py`文件 ## 用例说明文档 ![case_data.xlsx用例说明文档](https://gitee.com/li-wenliang/api-auto-test/raw/master/imgs/用例说明文档.png) ## 使用说明 1. 本项目直接使用的requests.Session理论上实现了cookie请求的管理,不用单独提取cookie,支持前后端分离项目,兼容Restful接口规范。 2. 项目中token操作中为写时,请务必保证是能正常获得响应并且返回了token字段 3. 本项目用例书写格式请务必遵循,sheet页用例说明中有一部分 4. 该项目找的是b站上的一个前后端分离应用,域名使用的是b站某视频里提供的,请大家谨慎操作学习 5. 本项目所要投入生产,请自行修改配置文件config.yaml及用例数据case_data.xlsx, 6. 默认注释了用例失败重跑装饰器,需要的时候自行解除注释即可,但这个功能比较耗时间,自取所需吧 7. 本项目从2020年8月提交,陆续迭代,如果各位有什么建议 欢迎提给我,会尽力解决~~ ## 接口服务(后端源码来自) vue 电商项目实战 教学视频: https://www.bilibili.com/video/BV1EE411B7SU?p=10 服务提供者:https://space.bilibili.com/283273603?spm_id_from=333.788.b_636f6d6d656e74.6 ## 测试报告 ![本地运行测试后生成报告](https://gitee.com/li-wenliang/api-auto-test/raw/master/imgs/localhost_report.png) ![测试报告用例失败重跑](https://gitee.com/li-wenliang/api-auto-test/raw/master/imgs/用例失败重跑截图.png) ## 更新记录 2020/08/08 增加实际响应存储数据的方法,并在字典可以处理依赖见tools/svae_response.py 2020/08/09 实现多文件上传,接口中Path参数依赖处理 2020/11/18 使用re库解决当请求参数层级结构多出现无法提取的bug,减少冗余代码,优化path路径参数提取,更新用例填写说明文档 2020/11/21 更新用例文档,合并文件对象,文件地址,优化文件上传处理方式 2020/11/21 config.yaml文件中新增request_headers 选项,默认header在此设置,优化test_api.py文件,整合read_file.py 2020/11/22 优化请求断言方法支持用户自定义提取响应自定内容,支持多数据断言,整合请求方法,优化测试启动方法,部分日志移除,修改预期结果处理 2020/12/08 优化断言信息,增加数据库(支持mysql)查询操作, 使用`@pytest.fixture(scope="session")`来托管数据库对象,用例新增sql栏 2020/12/16 使用conftest.py 初始化用例, 增加失败重跑机制, 增加运行文件run,优化test_api.py冗余代码 2021/01/19 添加数据清洗功能(测试开始前进行数据库备份-分别在服务器和本地进行,测试结束后将备份用以恢复数据-将尝试从服务器和本地恢复到服务器数据库中,docker部署的mysql服务已本地调试通过,直接linux部署的mysql并未测试) 2021/02/27 添加hooks.py文件(可在此处自定义方法,并用于用例当中,注意请务必在定义的方法中使用return),移除上次更新的eval语法糖,增加用例处理前的日志