2023最新pytest+yaml接口自动化测试框架封装总结

1. 框架封装基础


以下是框架封装的技术基础,打好这些基础的话,能够很轻松地封装出来框架

对于基础还有欠缺的话,建议针对性精进:

1. 扎实的Python语言基础

  • 函数、类

  • 文件读写

  • 处理报错

  • 数据结构

  • 标准库

  • 测试框架库(unittest、pytest)

2. 丰富的接口测试经验

  • 请求方法

  • 请求参数

  • 响应类型

  • 数据的位置、数量

  • 接口关联

  • 数据驱动

3. 良好的代码审美

  • 文件名称

  • 变量名称

  • 代码逻辑

  • 嵌套if或者嵌套for

  • if和for彼此嵌套

  • 注释和日志记录

4. 优雅的架构设计

  • yaml文件自动读取

  • yaml文件自动保存

  • yaml内容动态替换

  • 兼容单用例测试和数据驱动测试

  • 兼容关联变量和参数化变量

  • 兼容数据提取的位置和顺序

  • 兼容数据的二次处理(类型转换、加密解密、数据库查询)

  • 兼容自定义配置

2. 框架封装目标


pytest+yaml接口自动化测试框架的设计目标有4个:

1.用法简单

测试执行人员仅需编辑yaml文件即可使用框架,完成接口自动化测试

2. 功能丰富

框架应实现以下功能,可供直接使用:

1. 项目配置

2. 接口请求

3. 接口关联

4. 接口断言

5. 数据驱动测试

6. 数据库断言

7. 日志记录

8. 测试报告

9. 其他项目特定需求

3. 维护方便

以下是框架封装的技术基础,打好这些基础的话,能够很轻松地封装出来框架

对于基础还有欠缺的话,建议针对性精进:

4. 扩展性好

用例文件应可以与框架代码分离使用,以便:

  • 为迁移测试平台打好基础

  • 为接口性能测试打好基础

3. 框架文件结构


1. 面向框架维护人员

 |--commons  # 框架核心,单独维护,和项目用例分离
 |   |`--cases.py   # 加载测试用例
 |   |`--databases.py  # 链接数据库
 |   |`--exchange.py  # 数据交换和注入
 |   |`--files.py  # 文件加载读写
 |   |`--funcs.py# 热加载函数
 |   |`--models.py# 定义用例规范
 |   |`--session.py# 二次开发requests
 |   |`--settings.py  # 加载配置文件
 |    `--templates.py  # 模板引擎
 |--requirements.txt# 框架依赖文件
 |--run.py  # 框架入口文件

2. 面向框架使用人员

 |-- data   # 数据文件
 |   |`-- private.pem  # rsa 私钥
 |    `-- public.pem  # rsa 公钥
 |-- pytest.ini # 配置文件
 `-- testcases # yaml用例存放目录

以下文件为自动生成

 |-- extract.yaml  # 数据提取文件
 |-- pytes.log # 日志文件
 |-- report  # 测试报告
 |-- temp  # 项目临时文件

4. 框架使用方法


面向框架使用人员

0. 新建空的项目

1. 编辑用例文件

title: 登录 # 用例名称

 request: # 请求参数
   method: POST
   url: https://api.tttt.one/rest-v2/login/access_token
   json:
     email: sanmu@qq.com
     password: 123123
 ​
 extract: # 响应解析
   code: [ status_code, (.*), 0 ]
 ​
 validate:
   equals: # 断言相等
     状态码断言:
       - 422     # 预期状态码
       - ${code}# 实际状态码,解析出来的变量

2. 编辑配置文件

[pytest]
 # allure报告配置
 addopts = --alluredir=temp --clean-alluredir
 ​
 ​
 # 日志文件配置
 log_file = pytes.log
 log_file_level = info
 log_file_format   = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s]  : %(message)s
 log_file_date_format  = %Y-%m-%d %H:%M:%S
 ​

3. 启动框架执行用例

框架执行前:只有2个文件,基本符合框架封装目标

框架执行命令:

 python D:\api_framework\main.py

框架执行后:

再看具体内容

终端输出

日志文件

临时变量

测试报告

4. 更复杂的用例

 feature: 用户相关
 story: 注册
 ​
 title: ${title}# P.1.用例标题使用参数化变量
 ​
 request:
   method: POST
   url: ${base_url}/login/sign_up   # C.也可以只写/login/sign_up
   json:
     email: ${email}            # P.2.参数使用变量
     password: ${str(password)}# P.3. 参数使用变量
 ​
 extract:
   code: [ status_code, (.*), 0 ]# R.1. 提取数据,用于断言或接口关联
 ​
 validate:
   equals: # 断言相等
     状态码断言:
       - ${assert_code}         # P.3. 断言也使用变量
       - ${code}                # R.2. 使用提前到的变量进行断言
 ​
 parametrize:
   - ["title","email","password","assert_code"]
   - ["账号为空","","11111111", 422]
   - ["密码均为空","1111111@qq.com","", 422]
   - ["账号密码均为空","","", 422]
   - ["账号不符合邮箱规则","11111111","1111111", 422]
   - ["注册成功","sanmu_01@qqqqqq.com","password", 200 ]
   - ["注册成功","sabmu_02@qq.com","password", 200 ]

变量的来源及优先级如下:

  1. C: 配置文件中的变量(全局常量,保存在pytest.ini)

  1. P:参数化中的变量 (DDT,保存在当前文件)

  1. R:接口响应中的变量 (接口关联,保存在extract.yaml)

如果变量相同,根据优先级取值,

如果变量名不同,可相互共存

执行结果

日志文件

测试报告

基本实现框架封装目标!

5. 框架运行流程


面向框架维护人员

1. 加载配置文件

settings.py 在框架中最先被运行,

它会加载pytest.ini中的内容,以便其他代码使用配置

如果对框架编写猴子补丁,可以考虑放在此文件中

2. 加载用例文件

cases.py 文件随后运行,搜索yaml用例文件,并自动交易yaml内容是否用例规范

  1. 搜索范围

默认为当前目录及子目录、若要指定自定目录,在配置文件中指定

例如,yaml用例文件在tests目录中,则在pytest.ini添加以下内容

 [api_test]
 case_path = 'tests'
  1. 用例规范

yaml用例【必须】包含以下字段

title:  # 用例名称
request: # 请求参数
extract: # 数据提取公式
validate: # 用例断言

根据业务场景,【可选】添加以下字段

feature: # alluer注解
story: # alluer注解
parametrize: # 数据驱动测试

缺少必填字段,校验失败

增加其他字段,自动清除

3. 生成pytest用例

case.py 文件搜索到yaml文件中后,生成pytest用例

在此环节完成数据驱动测试、allure注解

并在pytest用例中定义了接口关联和自定义断言

4. 执行用例

  1. 发送请求:session.py

  1. 接口关联:exchanger.py

  1. 热加载: funcs.py

  1. 自定义断言: models.py

5. 生成测试报告

这个没啥好说的,调用allure就是

os.system("allure generate temp -o report --clean")

6. 框架源码下载


不免费提供,有意购买可私聊

### 使用 Python pytest Requests YAML Allure 构建测试框架 #### 项目结构设计 为了有效地管理和维护接口自动化测试,合理的项目结构至关重要。通常情况下,项目的文件夹和文件可以按照功能模块划分如下: - `api`:用于封装 HTTP 请求为 Python 接口的方法。 - `common`:放置各种辅助性的工具类。 - `core`:核心部分,负责请求方法的封装以及关键字返回结果类的设计。 - `config`:存储配置文件,比如环境变量设置等。 - `data`:用来保存测试所需的数据集。 - `operation`:定义操作层面的关键字,可能涉及多个 API 的组合调用逻辑。 - `pytest.ini` 和 `requirements.txt` 文件分别指定 Pytest 配置参数及相关依赖项列表。 #### 安装依赖库 在根目录下的 `requirements.txt` 中列出了所有必要的第三方包名称及其版本号。要安装这些依赖,可以在终端运行命令 `pip3 install -r requirements.txt`[^5]。 #### 编写测试用例 创建具体的测试案例时,推荐采用 BDD (行为驱动开发) 或 TDD (测试驱动开发) 方式编写描述性更强的名字,并利用装饰器标记不同的特性标签以便分类执行特定类型的测试。下面是一个简单的例子展示如何基于百度搜索API编写的测试函数: ```python from api.baidu_api import BaiduApi import pytest import allure class TestBaidu(): @pytest.mark.test @allure.title("验证百度搜索功能") def test_baidu_select(self): response = BaiduApi().baidu_search_api() with allure.step('打印响应'): print(response) ``` 这段代码展示了怎样通过导入自定义模块中的类实例化对象并调用其内部方法发起网络请求;同时借助于 `@pytest.mark` 可以为单个或一组测试添加元数据属性,而 `@allure.title()` 则允许给定更直观易懂的标题说明当前正在做什么工作。 #### 执行测试与生成报告 完成上述准备工作之后就可以直接使用命令行工具启动整个流程了——只需简单输入 `pytest --alluredir=./result` 即可让 Pytest 自动寻找符合条件的所有 `.py` 文件内的测试单元加以检验并将最终的结果导出到本地磁盘上预先设定好的路径里去等待进一步分析处理。最后一步则是打开浏览器访问由 Allure 提供的服务端地址查看可视化的统计图表和其他有用的信息摘要。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值