基于pytest搭建接口自动化测试框架,提供源码
基于pytest搭建接口自动化测试框架
框架整体介绍和方法教程新框架(比这个功能多了很多,用例使用yaml编写)源码框架结构xmind项目结构介绍源码地址使用教程1.全局变量设置和使用2.参数配置3.接口参数依赖关联参数提取:参数使用处理参数依赖代码截图
4.使用效果5.日志使用源码使用
6.requests二次简单封装源码使用
7.yaml_.py教程源码:写使用写的效果读使用
8.mysql_.py教程源码使用
9.pytest.ini配置使用10.运行文件11.参数自动化使用12.allure报告
框架整体介绍和方法教程
新框架(比这个功能多了很多,用例使用yaml编写)
pytest+yaml设计接口自动化框架过程记录(一步一步记录如何设计),源码提供
源码框架结构
源码地址
喜欢打个星啊,感谢 gitee :https://gitee.com/your_dad_died/bm_pytest_api github: https://github.com/Theshy0000/bm_pytest_api
使用教程
1.全局变量设置和使用
知识点:使用conftest配合@pytest.fixture()使用在用例所在的文件中不需要导入可以直接使用
2.参数配置
其他文件通过导入进行读取
3.接口参数依赖关联
参数提取:
调用parameter.update_rv()方法设置参数提取 方法源码自选观看 result 为接口返回的完整响应主体内容,通过字典键值提取值,给与这个值赋值给waybillNo这个变量,后续通过waybillNo可以使用这个提取的值。类似于jmeter的提取器
参数使用
upstream_create_waybill_data 这个是接口原始参数,我存放在data文件下 replace_expression 这个为依赖表达式,我直接用变量写的,也可以写在yaml文件下,自己扩展 rv 之前提取的参数所储存的字典
处理参数依赖代码截图
知识点: 我标记的地方先使用了集合去重的特性,最后用列表返回
4.使用效果
注意:在上面的原数据截图中 “waybillNo”:“Y22011101026000006”,经过替换变了。原始数据的’id’:1111也被替换
5.日志使用
源码
颜色文件存储位置,储存文件日志级别日志名称等
使用
from tool.log import logger logger.info()等,上面都有打印到控制台的截图
6.requests二次简单封装
源码
直接写了get和post的2种方法,现在常用的就这2个,大部分都是post,提前把ip,headers信息提前封装,针对公司业务封装上下游企业
使用
post方式: result = requests.post('/waybill/createWaybill', upstream_create_waybill_data).json()
get方式: result = requests.get('/waybill/generateWaybillNo').json()
7.yaml_.py教程
源码:
实现读和写,判断文件不存在则新建后读写
写使用
我这里使用了’a’ 操作文件,追加
写的效果
8.mysql_.py教程
源码
self.cur = self.db.cursor(cursor=pymysql.cursors.DictCursor) 设置以字典的格式返回查询数据 先创建数据库连接,在进行非查询操作时操作完sql语句后需要提交self.db.commit(),如果发生错误就进行回滚self.db.rollback()
使用
知识点 f’{}’ 这是python新语法,等同于format()
9.pytest.ini配置使用
(之前这些和pytest好像没啥关系啊,都自己写的方法)
更改默认运行pytest命令 其他参数百度
addopts = -vs –alluredir ./report/allure_raw –durations=0
–alluredir ./report/allure_raw 设置报告原始数据的目录
设置运行用例目录
testpaths = case
设置标签,可以根据标签来运行指定用例
markers =
waybill : run waybill case -m waybill
bill :run bill case -m bill
10.运行文件
import pytest
import os
import shutil
if __name__ == '__main__':
try:
# 删除之前的文件夹
shutil.rmtree("report/allure_raw")
except:
print('之前未生成报告原文件')
pytest.main([])
#编译报告原文件并启动报告服务
os.system('allure serve report/allure_raw')