接口测试项目总结

发布时间:2026/5/19 23:31:18

接口测试项目总结 testApi 接口自动化项目架构介绍一.项目介绍基于 Python Pytest Requests Allure YAML该项目是一个接口自动化测试框架主要针对商城系统的核心业务流程进行自动化验证。涵盖了用户管理增删改查、商品管理列表获取、详情查询、订单管理下单提交、订单支付以及登录授权等关键功能模块。二.项目结构说明testApi/ # 项目根目录 ├─ config/ # 全局配置目录 │ ├─ config.ini # 环境配置文件API 地址、数据库信息等 │ ├─ operationConfig.py # 配置文件解析类 │ └─ setting.py # 全局路径与常量配置 ├─ data/ # 测试数据目录YAML 格式 │ ├─ addUser.yaml # 用户新增接口数据 │ ├─ getProductList.yaml # 商品列表接口数据 │ ├─ loginName.yaml # 登录接口数据 │ └─ orderPay.yaml # 订单支付接口数据 ├─ report/ # 测试报告目录自动生成 │ ├─ html/ # Allure 交互式报告 │ └─ result/ # Allure 原始结果数据 ├─ tests/ # 测试用例执行目录 │ ├─ conftest.py # Pytest 全局钩子与 Fixture │ ├─ test_productList.py # 商品与订单业务流测试 │ └─ test_debug_api.py # 接口调试测试类 ├─ utils/ # 核心功能封装工具类 │ ├─ RequestUtil.py # 接口请求基类封装 Requests │ ├─ MySqlUtil.py # 数据库操作工具类 │ ├─ logUtil.py # 日志处理工具 │ ├─ yaml_util.py # YAML 数据解析与参数提取工具 │ └─ assertions.py # 自定义断言封装 │ ├─ baseUtil.py # 基础工具类 │ ├─ dingRobotUtil.py # 钉钉机器人通知工具 │ ├─ allureUtil.py # Allure 报告辅助工具 │ └─ DynamicUtil.py #yaml动态参数/函数替换工具 ├─ conftest.py # 顶层 Pytest 配置 ├─ extract.yaml # 接口依赖参数动态存储文件 ├─ pytest.ini # Pytest 运行配置文件 ├─ requirements.txt # 项目依赖库清单 └─ run.py # 主程序入口执行测试并生成报告三.核心代码1. 程序入口 run.py代码实现如下importpytestimportosif__name____main__:# 执行 pytest 测试生成原始结果pytest.main([-s,-v,--alluredir./report/result,--clean-alluredir])# 使用 Allure CLI 生成 HTML 报告并自动打开os.system(allure generate report/result -o report/html --clean)os.system(allure open report/html)代码说明pytest.main(): 核心执行引擎-s输出打印信息-v显示详细结果--alluredir指定结果存放路径。allure generate: 将原始 JSON 结果转换为可视化的 HTML 报告。allure open: 自动在默认浏览器中启动本地服务展示报告。2. 接口请求基类 RequestUtil代码实现如下importrequestsimporturllib3fromutils.logUtilimportlogsclassRequestUtil:封装 Requests 请求处理异常与响应数据defget(self,url,dataNone,headerNone):urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)try:responserequests.get(url,paramsdata,headersheader,verifyFalse)returnself._handle_response(response)exceptExceptionase:logs.error(fGET 请求异常:{e})returnNonedefpost(self,url,dataNone,headerNone):urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)try:responserequests.post(url,datadata,headersheader,verifyFalse)returnself._handle_response(response)exceptExceptionase:logs.error(fPOST 请求异常:{e})returnNonedef_handle_response(self,response):统一处理响应格式res_dict{code:response.status_code,text:response.text,body:response.json()ifapplication/jsoninresponse.headers.get(Content-Type,)else{},res_ms:response.elapsed.microseconds/1000}returnres_dict...3. RequestUtil核心函数说明此函数是 Pytest 测试用例与数据文件之间的“粘合剂”主要用在数据驱动的自动化测试中。测试编写者只需关注 YAML 的定义而无需编写复杂的请求和断言代码。4.动态参数/函数替换类 DynamicUtil.py#核心函数defreplace_load(self,data):yaml数据动态解析替换解析str_datadataifnotisinstance(data,str):str_datajson.dumps(data,ensure_asciiFalse)# print(从yaml文件获取的原始数据, str_data)foriinrange(str_data.count(${)):if${instr_dataand}instr_data:start_indexstr_data.index($)end_indexstr_data.index(},start_index)ref_all_paramsstr_data[start_index:end_index1]# 取出yaml文件的函数名func_nameref_all_params[2:ref_all_params.index(()]# 取出函数里面的参数func_paramsref_all_params[ref_all_params.index(()1:ref_all_params.index())]# 传入替换的参数获取对应的值,类的反射----getattr,setattr,del....extract_datagetattr(DynamicUtil(),func_name)(*func_params.split(,)iffunc_paramselse)ifextract_dataandisinstance(extract_data,list):extract_data,.join(eforeinextract_data)str_datastr_data.replace(ref_all_params,str(extract_data))# print(通过解析后替换的数据, str_data)# 还原数据ifdataandisinstance(data,dict):datajson.loads(str_data)else:datastr_datareturndata该类实现了动态函数方法例如 timestamp、start_time、end_time等函数。在 YAML 用例中通过${函数名()}引用。执行时通过正则表达式解析字符串找到函数名并调用对应函数生成数据然后替换原字符串。四.测试用例设计1. YAML 数据定义-baseInfo:api_name:商品列表url:/coupApply/cms/goodsListmethod:Getheader:Content-Type:application/x-www-form-urlencoded;charsetUTF-8token:${get_extract_data(cookie)}testCase:-case_name:获取商品列表成功params:msgType:getHandsetListOfCustpage:1size:20validation:-contains:{error_code:0000}extract_list:goodsId:$.goodsList[*].goodsId2. Pytest 用例实现importallureimportpytestfromutils.RequestUtilimportRequestUtilfromutils.yaml_utilimportget_testcase_yamlallure.feature(商品管理模块)classTestProduct:allure.story(获取商品列表)pytest.mark.parametrize(base_info,testcase,get_testcase_yaml(./data/getProductList.yaml))deftest_get_product_list(self,base_info,testcase):allure.dynamic.title(testcase[case_name])# 调用封装的逻辑执行请求与自动断言RequestUtil().specification_yaml(base_info,testcase)五.快速开始环境准备确保本地已安装 Python 3.8 及 Allure Commandline 工具。安装依赖pipinstall-rrequirements.txt配置环境在config/config.ini中修改目标测试环境的base_url及数据库连接信息。运行测试python run.py六.完整执行生命周期读取 YAML ↓ 解析 YAML ↓ 动态函数替换 ↓ 发送 HTTP 请求 ↓ 返回响应 ↓ 断言启动阶段运行 run.py触发 pytest.main()。收集阶段Pytest 扫描 tests/ 目录读取 pytest.ini 配置加载 conftest.py 中的全局插件。执行阶段执行 system_login 获取权限。按照 order 标记的顺序依次执行各个测试类和方法。每次请求的原始数据被记录在 report/result 目录。报告阶段测试结束run.py 调用 allure generate 命令。将 JSON 格式的原始结果转化为 report/html 目录下的静态网页报告。自动打开浏览器展示最终的测试看板。七.测试结果执行完成后系统会自动弹出 Allure 报告页面。八.改进方向通过变量池实现接口依赖

相关新闻