# api_test_framework **Repository Path**: hjy1995/api_test_framework ## Basic Information - **Project Name**: api_test_framework - **Description**: 接口自动化框架,使用Python+requests,完全实现代码和数据分离 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-10 - **Last Updated**: 2023-02-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, pytest ## README # 项目介绍 - 接口自动化框架,实现代码和数据分离,写接口自动化用力时,只需要添加xml用例,然后在testrunner.py的测试方法中读取到这个xml所在的文件夹就可以了。 - 框架技术栈为requests+pytest+allure+PyYAML+xml,使用requirements.txt管理第三方库 # 项目结构 ## Jenkins job配置: - general(设置最大构建数,节省服务器资源) - 源码管理(git拉取代码) - 构建触发器(定时构建,远程构建) - 构建(shell脚本,命令行运行pytest) - 构建后操作(allure report,post build task【测试失败时通过飞书web hook通知】+远程构建【get url】) ## test_framework - cases:测试用例 - config:配置文件存放地址 - conf.yaml:各系统和环境的配置 - requirements.txt:工程依赖的第三方库,freeze命令写,install安装 - frame:框架主体 - caserun: case执行相关 - login:登录 - req:执行接口请求封装 - utils:工具类 - vo:测试用例对象 - conftest:pytest配置,现设置了pytest命令行执行参数 - testcaserunner:测试用例执行入口 - remotebuild.py: Jenkins中添加post build task,测试失败时,使用webhook通知和远程构建 # 框架使用 1、在chrome开发者工具,copy as fetch,然后去fetchreformat.py进行格式化成json格式的请求 2、新建xml测试用例 ```xml { "body":{ "module":"${module}123", "type":"${type}" }, "url": "https://www.baidu.com/path?t=${path}&m=${type}&f=${module}&ishttps=1", "method": "POST", "headers": { "content-type": "application/json${path}", "origin": "https://truck.g7s.huoyunren.com" } } demo oc $result.data.oa.ob[3].oc oa $result.data.oa ``` - case:一条用例,一个xml文件中可以写多条case - request是请求主体,包含body、url、method、headers,可以进行参数化,参数格式 ${var} - expect是期望结果,validType有三种 regex, equal, contain - variable是请求后需要保存的变量,key是保存的变量名,value是请求结果(类似jsonpath),value默认开头是$result,表示从响应结果从获取。 3、在testcaserunner.py的TestCase类中增加一个测试方法,get_case_vos()参数为上面新建的xml文件(也可以是目录),从xml文件中获取用例。 4、本地调试 - 命令行启动 ```shell # 本地命令测试 python3 -m pytest -vs testcaserunner.py --alluredir ./report/temp --env=PROD --sys=baidu # 生成allure报告: allure generate ./report/temp -o ./report/html --clean # 打开allure报告: allure open ./report/html ``` - 使用pytest.main()启动 先去conftest.py中的pytest_addoption()方法中,修改--env和--sys的默认值为需要测试的系统和环境;然后去testcaserunner.py执行main方法 # 框架代码运行顺序 1、获取命令行参数--env --sys,读取conf.yaml中的配置,使用对应env和sys的配置进行登录获取token 2、token传递到各个测试方法中,get_case_vos()解析xml用例成case对象列表,使用@pytest.mark.parametrize参数化测试 3、执行测试前,先替换请求中url,headers,body中的参数,再去封装好的request执行请求,请求后进行断言,最后保存变量进行参数传递(实现关联功能) # todo 1、补全自己的login登录逻辑 2、补全自己的request请求逻辑 3、在testcaserunner.py添加token传递逻辑 4、补全remotebuild.py中的webhoook 和 远程构建 功能