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. 框架源码下载


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

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值