自动化测试框架pytest+requests+allure
Pytest +requests+ Allure
这个框架基于python的的 Pytest 进行测试执行,并结合 Allure插件 生成测试报告的测试框架。采用 关键字驱动 方式,使测试用例更加清晰、模块化,同时支持 YAML 文件来管理测试用例,方便维护和扩展。
测试用例:YAML 文件
主要包含测试用例的步骤、调用的函数、函数所需的参数。
分层结构
- config 层:全局配置(
base_url、公共变量)。 - steps 层:测试步骤(请求 -> 提取 -> 断言)。
模板引擎
- 支持
{{}}变量插值语法。 - 支持环境变量注入(
${ENV_VAR})。
示例:登录失败测试用例(用户名为空)
desc: 登录失败测试用例--用户名为空
steps:- 发送Post请求:关键字: request_post_form_dataURL: "{{url}}"PARAMS:s: /api/user/loginapplication: appDATA:accounts: ''pwd: 123456type: username- 通过JSONPATH提取数据-MSG:关键字: ex_jsonDataEXVALUE: $..msgINDEX: 0VARNAME: msg_success- 断言-文本断言-等于:关键字: assert_text_comparatorsVALUE: "{{msg_success}}"EXPECTED: 登录账号不能为空OP_STR: ==
关键字驱动模式(封装 Keywords 函数)
Keywords 类封装了 YAML 文件中定义的请求关键字,并在执行步骤时,将有用的信息(如 token、response)存入全局字典 gc,同时,每个方法都使用 @allure.step 装饰器,以生成测试报告的步骤。
关键字实现示例
class Keywords:@allure.step('发送POST请求')def request_post(self, **kwargs):response = requests.post(**kwargs)gc.set_dict('current_response', response)return response@allure.step('发送GET请求')def request_get(self, **kwargs):response = requests.get(**kwargs)gc.set_dict('current_response', response)return response@allure.step('发送PUT请求')def request_put(self, **kwargs):response = requests.put(**kwargs)gc.set_dict('current_response', response)return response@allure.step('发送POST请求--form_data表单的请求')def request_post_form_data(self, **kwargs):url = kwargs.get('URL', None)params = kwargs.get('PARAMS', None)data = kwargs.get('DATA', None)headers = kwargs.get('HEADERS', None)request_data = {'url': url, 'params': params, 'data': data, 'headers': headers}response = self.request_post(**request_data)return response
Pytest 框架入口
import os
import pytestpytest_args = ['-v', '-s', '--capture=sys', '--clean-alluredir', '--alluredir=allure-results','--type=yaml', '--cases=./data/yaml_testcase', './core/ApiTestRunner.py'
]
pytest.main(pytest_args)
使用 pytest.main 函数,同时指定运行参数,包括 Allure 测试报告数据目录和运行的 py 脚本。
用例运行脚本
class TestRunner:def test_case_execute(self, get_dict_token, caseinfo):try:allure.dynamic.title(caseinfo['_case_name']) # 自定义用例标题local_context = caseinfo.get('context', {})kw = Keywords()# 解析测试用例步骤steps = caseinfo.get('steps', None)for step in steps:step_name = list(step.keys())[0]step_value = list(step.values())[0]context = copy.deepcopy(g_context().show_dic())context.update(local_context)step_value = eval(ReFresh(step_value, context))with allure.step(step_name):key = step_value['关键字']try:key_func = kw.__getattribute__(key)except Exception as e:print(e)key_func(**step_value)except Exception as e:assert False, f"核心执行器或是核心执行器调用的关键字有错误: {e}"finally:print('---执行用例完成---')
此运行脚本的功能:
- 读取 YAML 测试用例 (
caseinfo变量)。 - 逐步运行测试用例步骤 (
steps)。 - 使用
Keywords类中的函数执行测试操作。 - 通过 Python 反射机制动态获取
Keywords类中的方法并执行。
测试用例执行全流程
- 测试用例按照 YAML 规范编写,指定每一步测试步骤。
- 运行脚本读取 YAML 文件。
- 逐步执行 YAML 中定义的步骤,并调用
Keywords类中的方法。
技术要点
- YAML 文件管理测试用例。
- 采用关键字驱动模式 设计测试用例执行框架,使用例执行更加清晰。
- 使用全局字典管理数据,处理测试用例之间的关联情况。
- 集成 Allure 生成测试报告,提供详细的测试结果。
相关文章:
自动化测试框架pytest+requests+allure
Pytest requests Allure 这个框架基于python的的 Pytest 进行测试执行,并结合 Allure插件 生成测试报告的测试框架。采用 关键字驱动 方式,使测试用例更加清晰、模块化,同时支持 YAML 文件来管理测试用例,方便维护和扩展。 测试…...
Sympy入门之微积分基本运算
Sympy是一个专注于符号数学计算的数学工具,使得用户可以轻松地进行复杂的符号运算,如求解方程、求导数、积分、级数展开、矩阵运算等。本文,我们将详细讲解Sympy在微积分运算中的应用。 获取方式 pip install -i https://mirrors.tuna.tsin…...
Qemu-STM32(十):STM32F103开篇
简介 本系列博客主要描述了STM32F103的qemu模拟器实现,进行该项目的原因有两点: 作者在高铁上,想在STM32F103上验证一个软件框架时,如果此时掏出开发板,然后接一堆的线,旁边的人估计会投来异样的目光,特别…...
在 ABAP 开发工具 (ADT-ABAP Development Tools) 中创建ABAP 项目
第一步:安装 SAP NetWeaver 的 ABAP 开发工具 (ADT) 开发工具下载地址:https://tools.hana.ondemand.com/#abap 也可以在SAP Development Tools下载工具页面直接跳转到对应公开课教程页面,按课程步骤下载eclipse解压安装即可,过程…...
【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?
文章目录 ⭐前言⭐一、架构设计的本质差异🌟1、代码与数据结构的对比🌟2、技术栈的灵活性 ⭐二、开发与维护的成本博弈🌟1、开发效率的阶段性差异🌟2、维护成本的隐形陷阱 ⭐三、部署与扩展的实战策略🌟1、部署模式的本…...
【鸿蒙开发】Hi3861学习笔记- WIFI应用AP建立网络
00. 目录 文章目录 00. 目录01. LwIP简介02. AP模式简介03. API描述3.1 RegisterWifiEvent3.2 UnRegisterWifiEvent3.3 GetStationList3.4 GetSignalLevel3.5 EnableHotspot3.6 DisableHotspot3.7 SetHotspotConfig3.8 GetHotspotConfig3.9 IsHotspotActive 04. 硬件设计05. 模…...
大模型的微调技术(高效微调原理篇)
背景 公司有需求做农业方向的大模型应用以及Agent助手,那么适配农业数据就非常重要。但众所周知,大模型的全量微调对算力资源要求巨大,在现实的限制条件下基本“玩不起”,那么高效微调技术就非常必要。为了更好地对微调技术选型和…...
区间震荡指标
区间震荡指标的逻辑如下: 一、函数注解 1. Summation函数 功能: 计算给定价格序列Price的前Length个数据点的和,或在数据点数量超过Length时,计算滚动窗口内的价格和。 参数: Price(1):价格序列&#…...
HCIE-SLAAC
文章目录 SLAAC 🏡作者主页:点击! 🤖Datacom专栏:点击! ⏰️创作时间:2025年03月21日10点58分 SLAAC 帮助设备发现本地直连链路相连的设备,并获取与地址自动配置的相关前缀和其他…...
JavaScript | 爬虫逆向 | 掌握基础 | 01
一、摘要 实践是最好的导师 二、环境配置 在开始之前,需要确保你的计算机上已经安装了 Node.js。Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许你在服务器端运行 JavaScript 代码。 1. 下载 安装地址:https://nodejs.org…...
【PCIe 总线及设备入门学习专栏 3.2 -- PCIe 在进行大数据搬运时是如何组包的?】
文章目录 Overview1. PCIe数据传输的核心机制(1) 数据分割(2) TLP头部构造(3) 数据链路层封装(4) 物理层传输2. GPU从内存搬运数据的组包流程场景示例:3. 优化机制(1) 大页传输(TLP合并)(2) 流量控制与信用机制(3) 地址对齐优化4. 完整示例5. 性能影响Overview 本文将详细介…...
C++算法代码-植物生长算法求解多目标车辆路径规划问题
为了求解电商物流配送中的车辆路径规划问题,并同时优化多个目标(降低运营总成本、降低碳排放量、降低消费者的不满意程度),我们可以设计一个结合植物生长算法(Plant Growth Algorithm, PGA)、**模拟退火算法(Simulated Annealing, SA)和多目标优化算法(MODAD)**的组合…...
力扣算法Hot100——128. 最长连续序列
题目要求时间复杂度为O(n),因此不能使用两次循环匹配。 首先使用 HashSet 去重,并且 HashSet 查找一个数的复杂度为O(1)外循环还是遍历set集合,里面一重循环需要添加判断,这样才不会达到O( n 2 n^2 n2)判断是否进入最长序列查找循…...
深入解析 Java Stream API:从 List 到 Map 的优雅转换!!!
🚀 深入解析 Java Stream API:从 List 到 Map 的优雅转换 🔧 大家好!👋 今天我们来聊聊 Java 8 中一个非常常见的操作:使用 Stream API 将 List 转换为 Map。🎉 具体来说,我们将深入…...
当全球化成为商业常态,Shopify 如何为品牌生意铺平出海之路?
从独立站搭建到支付履约,从数据分析到生态整合,Shopify 为不同规模的企业提供可扩展的解决方案。 在数字化浪潮的推动下,跨境电商与品牌出海的黄金时代已然到来。然而,看似广阔的市场蓝海背后,是无数企业正在经历的“成…...
集成平台是选择专业iPaaS厂商还是大型软件企业?
在数字化转型的浪潮中,企业对于高效、灵活的集成平台需求日益增长。iPaaS(Integration Platform as a Service)作为当下热门的解决方案,为企业提供了将不同应用和数据源进行整合的云端平台。面对市场上的众多选择,企业…...
RC6在线加密工具
RC6加密算法是一种基于RC5改进的分组密码算法,曾作为AES(高级加密标准)的候选算法之一。它采用了4个32位寄存器,增加了32位整数乘法运算,以增强扩散和混淆特性,提高了安全性。RC6的设计简单、高效ÿ…...
python每日十题(5)
保留字,也称关键字,是指被编程语言内部定义并保留使用的标识符。Python 3.x版本中有35个保留字,分别为:and, as,assert,async,await,break,class,continue,def,del,elif,else, except, False, finally,for,from,global, if,import…...
应用案例 | 核能工业:M-PM助力核工业科研项目
M-PM助力核工业科研项目 一、项目背景 在核工业复杂系统的研发进程中,MBSE(基于模型的系统工程)方法的应用愈发成熟,已然成为推动系统设计与优化的关键力量。如今,各相关设计系统的 MBSE 模型数据呈现出精细化、多元…...
通过 Executors 创建线程池
在Java中,使用线程池来管理和创建线程是一个更为高效和灵活的方法。线程池可以帮助你管理线程的生命周期,避免了频繁创建和销毁线程的开销,从而提高了性能。 Java 提供了java.util.concurrent包来处理线程池的相关操作。常用的线程池类是 Ex…...
4.1、网络安全模型
目录 网络安全体系概述网络安全模型-BLP模型网络安全模型-Biba模型网络安全模型 - 信息流模型信息保障模型能力成熟度模型其它安全模型网络安全原则 网络安全体系概述 网络安全体系是网络安全保证系统的最高层概念抽象,是一个体系,体系一般是一个概念&a…...
ManiWAV:通过野外的音频-视频数据学习机器人操作
24年6月来自斯坦福大学、哥伦比亚大学和 TRI 的论文“ManiWAV: Learning Robot Manipulation from In-the-Wild Audio-Visual Data”。 音频信号通过接触为机器人交互和物体属性提供丰富的信息。这些信息可以简化接触丰富的机器人操作技能学习,尤其是当视觉信息本身…...
可发1区的超级创新思路:基于注意力机制的DSD-CNN时间序列预测模型(功率预测、交通流量预测、故障检测)
首先声明,该模型为原创!原创!原创! 一、应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等 二、模型整体介绍(本文以光伏功率预测为例) DSD-CNN(Depthwise-Spacewise Separable CNN)结合通道注意力机制,通过以下创新提升…...
IREE 调度机制深度解析:静态编译与动态执行的协同优化
IREE 调度机制深度解析:静态编译与动态执行的协同优化 一、引言 IREE (IR Execution Environment) 作为 TensorFlow 生态的重要成员,通过多层次调度策略实现了跨硬件平台的高效执行。其调度系统融合了编译期静态优化与运行时动态调整,在保证…...
istio 介绍-01-一个用于连接、管理和保护微服务的开放平台 概览
istio istio 一个用于连接、管理和保护微服务的开放平台。 介绍 Istio 是一个开放平台,用于提供统一的方式来集成微服务、管理跨微服务的流量、执行策略和聚合遥测数据。 Istio 的控制平面在底层集群管理平台(例如 Kubernetes)上提供了一…...
详细说明脚本评估和耗时较长的任务
在网页性能优化中,脚本评估和耗时较长的任务是两大关键性能瓶颈。它们直接影响页面的加载速度、交互响应以及用户体验。以下是对这两个概念的详细说明及优化策略: 一、脚本评估(Script Evaluation) 1. 定义 脚本评估指浏览器解析…...
Floyd 算法——97. 小明逛公园
卡码网:97. 小明逛公园https://kamacoder.com/problempage.php?pid=1155 题目描述 小明喜欢去公园散步,公园内布置了许多的景点,相互之间通过小路连接,小明希望在观看景点的同时,能够节省体力,走最短的路径。 给定一个公园景点图,图中有 N 个景点(编号为 1 到 N),…...
QT二 QT使用generate form 生成常用UI,各种UI控件
一 。没有使用general form 和 使用 general form 后,file层面和代码层面的不同比较 file层面的不同 代码层面的不同, 在 使用了general form之后,在主界面的构造方法中,使用ui->setupUi(this),就完成了所有UI的处理。 而之…...
蓝桥每日打卡--打家劫舍4
#蓝桥#JAVA#打家劫舍4 题目描述 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃…...
Intel Alder Lake N200桌面级处理器 详细介绍
1.Intel Alder Lake N200桌面级处理器 详细介绍 Intel Processor N200 是一款属于 Alder Lake-N 系列的入门级处理器,以下是其详细介绍: 基本规格 架构:Alder Lake-N,采用 Gracemont 架构的高效能核心。 核心与线程࿱…...
