自动化测试框架pytest+requests+allure

news2025/3/22 15:55:21

Pytest +requests+ Allure

这个框架基于python的的 Pytest 进行测试执行,并结合 Allure插件 生成测试报告的测试框架。采用 关键字驱动 方式,使测试用例更加清晰、模块化,同时支持 YAML 文件来管理测试用例,方便维护和扩展。

测试用例:YAML 文件

主要包含测试用例的步骤、调用的函数、函数所需的参数。


分层结构

  • config 层:全局配置(base_url、公共变量)。
  • steps 层:测试步骤(请求 -> 提取 -> 断言)。

模板引擎

  • 支持 {{}} 变量插值语法。
  • 支持环境变量注入(${ENV_VAR})。

示例:登录失败测试用例(用户名为空)

desc: 登录失败测试用例--用户名为空
steps:
  - 发送Post请求:
      关键字: request_post_form_data
      URL: "{{url}}"
      PARAMS:
        s: /api/user/login
        application: app
      DATA:
        accounts: ''
        pwd: 123456
        type: username
  - 通过JSONPATH提取数据-MSG:
      关键字: ex_jsonData
      EXVALUE: $..msg
      INDEX: 0
      VARNAME: msg_success
  - 断言-文本断言-等于:
      关键字: assert_text_comparators
      VALUE: "{{msg_success}}"
      EXPECTED: 登录账号不能为空
      OP_STR: ==

关键字驱动模式(封装 Keywords 函数)

Keywords 类封装了 YAML 文件中定义的请求关键字,并在执行步骤时,将有用的信息(如 tokenresponse)存入全局字典 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 pytest

pytest_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 类中的方法并执行。

测试用例执行全流程

  1. 测试用例按照 YAML 规范编写,指定每一步测试步骤。
  2. 运行脚本读取 YAML 文件。
  3. 逐步执行 YAML 中定义的步骤,并调用 Keywords 类中的方法。

技术要点

  1. YAML 文件管理测试用例
  2. 采用关键字驱动模式 设计测试用例执行框架,使用例执行更加清晰。
  3. 使用全局字典管理数据,处理测试用例之间的关联情况。
  4. 集成 Allure 生成测试报告,提供详细的测试结果。

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

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

相关文章

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…

力扣算法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 为不同规模的企业提供可扩展的解决方案。 在数字化浪潮的推动下,跨境电商与品牌出海的黄金时代已然到来。然而,看似广阔的市场蓝海背后,是无数企业正在经历的“成…

RC6在线加密工具

RC6加密算法是一种基于RC5改进的分组密码算法,曾作为AES(高级加密标准)的候选算法之一。它采用了4个32位寄存器,增加了32位整数乘法运算,以增强扩散和混淆特性,提高了安全性。RC6的设计简单、高效&#xff…

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 模型数据呈现出精细化、多元…

4.1、网络安全模型

目录 网络安全体系概述网络安全模型-BLP模型网络安全模型-Biba模型网络安全模型 - 信息流模型信息保障模型能力成熟度模型其它安全模型网络安全原则 网络安全体系概述 网络安全体系是网络安全保证系统的最高层概念抽象,是一个体系,体系一般是一个概念&a…

ManiWAV:通过野外的音频-视频数据学习机器人操作

24年6月来自斯坦福大学、哥伦比亚大学和 TRI 的论文“ManiWAV: Learning Robot Manipulation from In-the-Wild Audio-Visual Data”。 音频信号通过接触为机器人交互和物体属性提供丰富的信息。这些信息可以简化接触丰富的机器人操作技能学习,尤其是当视觉信息本身…

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的处理。 而之…

多条件排序(C# and Lua)

C# 升序排序 OrderBy 按升序对序列的元素进行排序 ThenBy 按升序对序列中的元素执行后续排序 降序排序 OrderByDescending 按降序对序列的元素排序 ThenByDescending 按降序对序列中的元素执行后续排序 public class Fruit {public int id;public string name;publi…