pytest+yaml接口自动化测试框架封装

news2025/2/2 4:47:22

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
  2. P:参数化中的变量 (DDT,保存在当前文件)
  3. 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
  2. 接口关联:exchanger.py
  3. 热加载: funcs.py
  4. 自定义断言: models.py

5. 生成测试报告

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

goland设置内置命令行为当前项目环境

goland设置内置的命令行为当前项目环境 修改 GoLand 中的 SSH 终端配置即可

125、仿真-基于51单片机的自行车电动车或者电机数码管控制系统设计(Proteus仿真+程序+原理图+配套资料等)

方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ,在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

linux守护进程介绍 | Linux的热拔插UDEV机制

简介 udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管 理/dev目录下的设备文件。udev在用户空间运行,而不在内核空间 运行。它能够根据系统中的硬 件设备的状态动态更新设备文件,包括设备文件的…

详解Single-Shot Alignment Network (S2A-Net) ,详解AlignConv,基于遥感图像的特征对齐旋转目标检测

引言 目标检测:把图像中的物体使用方框标记起来,不同类别物体应使用不同颜色 目标检测其实是寻找物体边界框(bounding box)回归问题(regression)和对物体分类问题(classification)的统一 遥感目标检测:普通的目标检测是日常生活中的横向的图…

JavasScript基础第一部分

此文章,来源于印客学院的资料,然后补充的。 此文档不一定涵盖了所有知识点,只是一个大概方向,仅供参考。 也算一个查漏补缺,诸君可以根据自己实际情况,自行衡量,看看哪里需要补充。 JavaScri…

【CentOS安装make】

问题: bash: make: command not found 1、去官网查找最新版本 http://ftp.gnu.org/pub/gnu/make/ 查找最新安装包 2、下载解压缩 wget http://ftp.gnu.org/pub/gnu/make/make-4.2.tar.gz tar -zxvf make-4.2.tar.gz cd make-4.2mkdir buildcd build../configure…

度量学习和表征学习

度量学习 定义 计算特征之间的距离(特征之间相乘),通过距离损失优化模型——>度量距离相关的损失函数 图片出自《【极市】张宇涵-CVPR2020 Oral|Circle Loss,从统一视角提升深度特征学习能力_哔哩哔哩_bilibili》…

短视频矩阵系统源码搭建--附赠代码

说明:本开发文档适用于短视频矩阵系统源码开发搭建,短视频seo矩阵源码开发搭建,抖音短视频seo源码开发搭建,抖音矩阵系统源码开发搭建等SaaS类产品开发场景。 短视频矩阵系统开发围绕的开发核心维度: 1. 多账号原理开…

shell脚本定时删除大小超200M的日志文件

需求 某个服务器的日志文件随着时间的增长越来越多,我不想自己一个个的删除,但是不删除的话,会很麻烦,万一因为日志文件导致内存满了就麻烦了! 实现步骤 1、写好实现的脚本 我要查找>200M的日志文件 find / -typ…

苹果平板电容笔好用吗?第三方apple pencil推荐

自从苹果推出了ipad的电容笔之后,一直在市场上保持着十分火爆的热度,但是因为Apple Pencil的价格太高,一般的消费者根本没有足够预算去入手。所以市场上就不断涌现出了不少可以很好代替Apple Pencil的平替电容笔,并且深受人们的热…

BTY Ecosystem DNS‘s Ideas of DeSoc

In May 2022, Ethereum founder Vitalik Buterin, economist Glen Weyl and Flashbots researcher Puja Ohlhaver jointly released “Decentralized Society: Finding Web3s Soul”. The core idea of this paper is the possibility of creating a decentralized society aro…

数据结构与算法基础(青岛大学-王卓)(6)

啊呀呀,不小心又断更快一个月了,我还是认真每天学习滴,最近还是香瓜,菜瓜,西瓜,羊角蜜不能停口啊,哈哈,二叉树这一章真是硬茬,难啃啊。 文章目录 [toc]树和二叉树树的定义…

linux扩大原磁盘后,扩大lvm空间

需求背景 原centos7虚机是将一块裸盘(未分区)通过lvm的方式挂载到/data目录下,现因业务需要,需要增加/data目录的磁盘空间,现在虚机管理平台上将原磁盘增加20G空间。 注意:如果是新增加一个磁盘&#xff…

二十、移动端网页开发-px 和 vw基础知识

目录&#xff1a; 1. 基础准备 2. vw 详解 一、基础准备 1. 观察你的html里面有没有meta完美视口设置&#xff0c;如果有&#xff0c;就不用再管&#xff0c;如果没有&#xff0c;就加上。 <head><meta charset"UTF-8"><meta http-equiv"X-UA-C…

Fiddler抓包app(方便后端定位app调用的是那个接口?参数为何?)

一、抓http请求的包 1、设置Fiddler允许远程连接 选择Tools->Options 选择Connections选项卡&#xff0c;选中允许远程连接&#xff0c;如图所示 2、手机与电脑连接相同的wlan网络 3、手机wlan设置手动代理&#xff0c; 1&#xff09;手动代理的主机名设为电脑ip&…

开放式耳机的类型有哪些?开放式耳机和封闭式耳机的区别?

今天来跟大家聊聊开放式耳机&#xff0c;其中开放式耳机类型有哪些&#xff1f;开放式耳机和封闭式耳机的区别在哪&#xff1f;市面上这么多开放式耳机&#xff0c;到底哪款开放式耳机才好用&#xff1f;下面一起来了解&#xff01; 一、什么是开放式耳机&#xff1f; 开放式…

新增进程管理、SSH会话管理功能,1Panel开源面板v1.4.0发布

2023年7月17日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.4.0版本。 在这个版本中&#xff0c;1Panel新增了进程管理和SSH会话管理功能&#xff1b;支持容器编辑和升级&#xff0c;数据库兼容MySQL 5.6&#xff1b;备份账号可以添加微软OneDrive&…

数字孪生和VR的结合将会带来怎样的改变?

随着科技的不断发展&#xff0c;数字孪生和虚拟现实&#xff08;VR&#xff09;这两个前沿技术正在逐渐融合&#xff0c;为各行各业带来了前所未有的改变。 数字孪生技术本身已经可以高度还原现实世界&#xff0c;而VR技术则能通过头戴式设备&#xff0c;让用户沉浸在这个虚拟…

uniapp editor组件 如何上传图片

需求&#xff1a;我们在使用uniapp的editor组件时&#xff0c;主要是为了保持输入内容的格式。里面的文字可以有颜色、粗体、排列样式&#xff0c;可以插入图片。就像下面这样。 一、如何处理图片&#xff0c;好让它在 rich-text组件中显示 &#xff1f; 逻辑&#xff1a;我们…

vue3和gin框架实现简单的断点续传

vue3和gin框架实现简单的断点续传 前端代码 Test.vue <template><div><inputtype"file"ref"uploadRef"change"upload"multiple/><templatev-for"item in fileList":key"item.key"><br><…