# 通用型接口自动化测试框架 **Repository Path**: zhujun6538/newtestframework ## Basic Information - **Project Name**: 通用型接口自动化测试框架 - **Description**: 通用型自动化测试框架,主要使用pytest+excel数据驱动+allure测试报告进行接口自动化测试工作。 主要功能: 接口直接的数据依赖: 需要B接口使用A接口响应中的某个字段作为参数 对接数据库: 讲数据库的查询结果可直接用于断言操作 动态多断言: 可(多个)动态提取实际预期结果与指定的预期结果进行比较断言操作 自定义扩展方法: 在用例中使用自定义方法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 1 - **Created**: 2022-01-04 - **Last Updated**: 2026-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通用型接口自动化测试框架 ## 介绍 本通用型接口自动化测试框架主要使用pytest+excel数据驱动+allure测试报告进行接口自动化测试工作 #### 主要功能: 接口直接的数据依赖: 需要B接口使用A接口响应中的某个字段作为参数 对接数据库: 讲数据库的查询结果可直接用于断言操作 动态多断言: 可(多个)动态提取实际预期结果与指定的预期结果进行比较断言操作 自定义扩展方法: 在用例中使用自定义方法 ## 安装教程 1. git clone https://gitee.com/zhujun6538/newtestframework.git 2. 使用pycharm打开newtestframework文件夹,并配置python虚拟环境 3. 输入pip install -r requirements.txt ,安装依赖包 4. 配置allure,参考教程:https://www.cnblogs.com/wsy1103/p/10530397.html 5. 编辑测试用例,script和testdata有已经写好的案例作参考,测试程序为yoshop yoshop gitee地址:https://gitee.com/xany/yoshop2.0 6. 运行runner.py #### requirements.txt ```shell allure-pytest==2.8.36 allure-python-commons==2.8.36 atomicwrites==1.4.0 attrs==21.4.0 certifi==2021.10.8 charset-normalizer==2.0.9 colorama==0.4.4 idna==3.3 importlib-metadata==4.10.0 iniconfig==1.1.1 jsonpath==0.82 packaging==21.3 pluggy==1.0.0 py==1.11.0 PyMySQL==1.0.2 pyparsing==3.0.6 pytest==6.2.5 PyYAML==6.0 requests==2.27.0 six==1.16.0 toml==0.10.2 typing_extensions==4.0.1 urllib3==1.26.7 xlrd==1.2.0 zipp==3.7.0 ``` ## 目录结构 ```shell ├─conf │ └─config.yaml # 测试配置文件 ├─data │ └─test_data.xlsx # 用例文件 ├─log # 日志文件夹 ├─report # 测试报告文件夹 ├─scripts │ └─test_api.py # 测试文件 ├─testdata # 测试驱动文件夹 ├─utils # 工具包 │ ├─__init__.py # 常用方法封装 │ ├─AllureHandler.py # 生成测试报告相关 │ ├─data_process.py # 依赖数据处理 │ ├─db.py # 数据库连接对象 │ ├─hook.py # 自定义扩展方法(可用于用例)文件 │ └─file_reader.py # 用例、配置项读取 ├─requirements.txt # 项目依赖库文件 ├─pytest.ini # pytest配置 ├─settings.py # 框架环境变量配置 └─runner.py # 主启动文件 ``` ## 配置文件 #### server 默认使用的是dev,可运行时传入关键词参数env=环境名 #### request_headers 基准请求头,即为默认所有接口都会使用的基础请求头数据 #### database 支持mysql数据库 ## 测试用例录入 #### case_id 用例编号, 与功能测试用例一致只是个用例编号 #### title 用例标题,简述该用例做的事情,将体现在allure报告中 #### url 路径不包含ip和端口,可以使用变量及函数 #### method 请求方法 #### headers 请求头,和config.yaml里基准header合并,更新。可以使用变量及函数 #### datatype 请求体数据类型,params/json/data/file #### data 请求体,请求时被转为dict,可以使用变量及函数 #### extract 提取参数,{变量名: jsonpath语法}从当前用例的响应结果中提取值,以键值对的方式,将其加入参数变量池 字典中key不能重复,重复时后添加的key - value,覆盖之前的 #### extract_sql 后置sql,发送请求之后,执行SQL,并把结果加入到extract中 过程会先给sql语句赋值变量及函数再去执行SQL语句 只支持mysql #### validate 格式为{jsonpath路径:预期值} 断言, 多个断言时,一个断言不通过则该用例不通过 实际结果从响应和extract中提取, 预期结果可以使用变量及函数 ## 使用变量及函数操作演示 #### 获取请求/响应值参数,供后续使用 响应值使用"$.response.路径"的方式来引用变量,请求参数使用"$.data.路径"的方式来引用变量 仅支持json获取,否则获取全部 可使用此功能的字段: headers,url,data,extract_sql,validate ###### 例: 用例编号1响应为 ```shell {"status":200,"message":"登录成功","data":{"userId":10001,"token":"xxx"}} ``` 用例编号1在extract中输入 ```shell {"token":"$.response.data.token"} ``` $.data.token是响应报文提取token的jsonpath,后续测试步骤可在headers加入 ```shell {"Access-Token": "${token}"} ``` 请求时会加入头{"Access-Token": "xxx"} #### 获取sql查询参数,供后续使用 使用$.字段名来获取extract_sql查询的字段值 headers,url,data,validate ###### 例: 用例1中extract_sql为 ```shell select id,name from xxx ``` 后续测试步骤可在请求体加入 ```shell {"id": "$.id","name": "$.name"} ``` 请求时请求体输入为{"id": "$.id","name": "$.name"} $.id会变为select id,name from xxx获取的第一条的id #### 自定义函数 有些特殊参数生成规则, 如md5加解密等, 则可在utils/hook.py定义 定义之后使用${方法名()} 调用无参函数, ${方法名(参数名)}调用有参函数 可使用此功能的字段: headers,url,data,extract_sql,validate ###### 例: 在utils/hook.py中加入方法 ```shell def random_number(): return random.randint(99999,999999) ``` 可在请求体加入 ```shell {"number": "${random_number()}"} ``` 实际请求体为{"number": xxxxxx} 也可加入参数,参数也可以使用变量,例如在utils/hook.py中加入方法 ```shell def random_number(total): if total > 0: return "delete" else: return "add" ``` 之前extract存入响应的total字段值,后续测试步骤可在url加入 ```shell /user/${random_number($.total)} ``` 实际请求url为/user/add(delete)