接口自动化测试-Pytest核心固件Fixture详解以及应用实战

news2024/11/28 23:47:18

 目录

前言:

一、Fixture概述

二、Fixture分类 在Pytest中,Fixture可以分为4类:

三、Fixture使用 下面结合实例说明如何使用Fixture。

3.1 session级别的Fixture

3.2 module级别的Fixture

3.3 function级别的Fixture

3.4 class级别的Fixture

四、Fixture参数化

五、总结

接口自动化测试:


前言:

在软件开发中,自动化测试是一个非常重要的部分,能够帮助开发人员快速检测代码的正确性和稳定性。而接口自动化测试则是其中的一个关键环节,Pytest作为一个简单易用的测试框架,被越来越多的开发者所采用。

在Pytest中,Fixture是一个核心概念,它可以为测试函数提供可靠的测试数据和环境。本文将对Fixture进行详细解释,并结合应用实战进行演示。

一、Fixture概述

Fixture是一种特殊的Pytest函数,其作用是为测试用例提供需要的测试数据和测试环境。在Pytest中,Fixture以装饰器的形式存在,通过给测试函数添加不同的Fixture装饰器,可以为测试函数注入不同的测试数据和环境。

二、Fixture分类 在Pytest中,Fixture可以分为4类:

  1. session级别的Fixture:在整个测试会话期间只执行一次,可以用于预置条件的设置和清理工作;
  2. module级别的Fixture:在每个测试模块运行前后都会执行一次,可以用于测试模块级别的预置条件设置和清理工作;
  3. function级别的Fixture:在每个测试函数运行前后都会执行一次,可以用于测试函数级别的预置条件设置和清理工作;
  4. class级别的Fixture:在每个测试类运行前后都会执行一次,可以用于测试类级别的预置条件设置和清理工作。

三、Fixture使用 下面结合实例说明如何使用Fixture。

3.1 session级别的Fixture

session级别的Fixture通常用于测试会话的初始化和清理工作。例如,我们需要对一个API进行测试,但是该API依赖于数据库,我们需要先创建数据库连接,并在所有测试用例结束后关闭连接。代码如下:

import pytest

@pytest.fixture(scope='session')
def db_conn():
    conn = create_db_conn()
    yield conn
    conn.close()

def test_api(db_conn):
    # 测试用例代码

在上述代码中,通过使用@pytest.fixture装饰器来定义一个名为db_conn的Fixture,并将其scope参数设置为session,表示该Fixture只在整个测试会话(即所有测试用例)开始时执行一次。在Fixture函数中,我们可以先创建数据库连接,然后使用yield关键字将连接对象返回给测试用例,在所有测试用例运行结束后,Fixture函数会自动关闭连接。

3.2 module级别的Fixture

module级别的Fixture通常用于测试模块的初始化和清理工作。例如,我们需要测试一个模块,但是该模块依赖于某些资源,我们需要在测试开始之前创建这些资源,并在测试结束后清理资源。代码如下:

import pytest

@pytest.fixture(scope='module')
def resource():
    # 创建测试资源
    resource = create_resource()
    yield resource
    # 清理测试资源
    cleanup_resource(resource)

def test_module1(resource):
    # 测试用例代码

def test_module2(resource):
    # 测试用例代码

在上述代码中,我们使用@pytest.fixture装饰器定义了一个名为resource的Fixture,并将其scope参数设置为module,表示该Fixture在每个测试模块开始时执行一次。在Fixture函数中,我们可以先创建测试资源,然后使用yield关键字将其返回给测试用例,最后在所有测试用例运行结束后,自动清理测试资源。

3.3 function级别的Fixture

function级别的Fixture通常用于单个测试函数的初始化和清理工作。例如,我们需要测试一个API,但是该API依赖于某些前置条件,我们需要在测试之前设置这些前置条件,并在测试之后清理它们。代码如下:

import pytest

@pytest.fixture(scope='function')
def preconditions():
    # 设置前置条件
    set_preconditions()
    yield
    # 清理前置条件
    cleanup_preconditions()

def test_api1(preconditions):
    # 测试用例代码

def test_api2(preconditions):
    # 测试用例代码

在上述代码中,我们使用@pytest.fixture装饰器定义了一个名为preconditions的Fixture,并将其scope参数设置为function,表示该Fixture在每个测试函数开始时执行一次。在Fixture函数中,我们可以设置前置条件,然后使用yield关键字将控制权返回给测试用例,最后在测试结束后自动清理前置条件。

3.4 class级别的Fixture

class级别的Fixture通常用于测试类的初始化和清理工作。例如,我们需要测试一个包含多个API的类,但是这些API都依赖于同一组前置条件,我们可以在测试类开始之前设置前置条件,并在测试类结束后清理它们。代码如下:

import pytest

@pytest.fixture(scope='class')
def preconditions():
    # 设置前置条件
    set_preconditions()
    yield
    # 清理前置条件
    cleanup_preconditions()

class TestClass:
    def test_api1(self, preconditions):
        # 测试用例代码

    def test_api2(self, preconditions):
        # 测试用例代码

在上述代码中,我们使用@pytest.fixture装饰器定义了一个名为preconditions的Fixture,并将其scope参数设置为class,表示该Fixture在每个测试类开始时执行一次。在测试类中,我们可以使用相同的preconditions Fixture,并将其作为测试函数的一个参数传递。

四、Fixture参数化

Fixture还支持参数化。例如,在上述示例中,我们可能需要测试多组不同的前置条件,我们可以使用pytest.mark.parametrize装饰器来为Fixture参数化。代码如下:

import pytest

@pytest.fixture(scope='function')
def preconditions(request):
    # 设置前置条件
    params = request.param
    set_preconditions(params)
    yield params
    # 清理前置条件
    cleanup_preconditions()

@pytest.mark.parametrize('preconditions', [('param1', 'param2'), ('param3', 'param4')], indirect=True)
def test_api(preconditions):
    # 测试用例代码

在上述代码中,我们使用request.param来获取Fixture的参数,并使用pytest.mark.parametrize来为Fixture参数化。需要注意的是,必须将indirect参数设置为True,以告诉Pytest对Fixture进行参数化而不是测试用例。

五、总结

通过本文的介绍,我们了解了Pytest Fixture的工作原理和不同的使用方式。在实际开发中,合理使用Fixture可以帮助我们编写更加可靠和高效的自动化测试代码,提升软件质量和开发效率。

【自动化测试交流】:574737577http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=-g2CgaQ6FQkLa6XZE3qwxIlZPr0XIydU&authKey=X1E3R6lIXH5JCy%2BwBsFj9In2EBv3SHZjupbXrUjEyFN%2FvfnKAE8tiyxNeJr2wBLO&noverify=0&group_code=574737577

接口自动化测试:

 自动化测试福利:

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

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

相关文章

2023.5.13前端设计

SpringbootVue架构设计(一) 项目中的文件来自B站视频(程序员青戈) https://www.bilibili.com/video/BV1U44y1W77D 前端设计 assets 文件夹通常用于存放静态资源文件,例如图像、CSS、字体等。components 文件夹通常用…

2023.5.14数据库设计

SpringbootVue架构设计(二) 项目中的文件来自B站视频(程序员青戈) https://www.bilibili.com/video/BV1U44y1W77D 数据库设计 1、article 在关系型数据库中,text类型和varchar类型都是用来存储字符串的数据类型。它…

【ShaderToy中图形效果转译到UnityShaderlab案例分享_Flame】

ShaderToy内的源码与效果图如下: float noise(vec3 p) //Thx to Las^Mercury {vec3 i = floor(p);vec4 a = dot(i

电动力学专题:电磁波传播时的色散效应

本文中假定波动方程的性质足够好,不要杠,杠你就输了 数学分析中的问题和XX 波动方程:\frac{\partial^2 u}{\partial t^2} - a^2 \frac{\partial^2 u}{\partial x^2} 0......(1) 波的色散 波动方程描写的是以恒定速度a传播的非衰减波。方程&…

【电厂用 交流三相电流继电器HJL-F93/AY 导轨安装 JOSEF约瑟供应 】

名称:交流三相电流继电器,品牌:JOSEF约瑟,型号:HJL-F93/AY,功率消耗:≤5W,触点容量:250V/5A,额定电压:58、100、110、220V 上海约瑟供应 交流三相…

第十四届蓝桥杯青少组选拔赛Python真题 (2022年10月30日),包含答案

目录 一、选择题 二、编程题 第十四届蓝桥杯青少组选拔赛Python真题 (2022年10月30日) 一、选择题 第 1 题 单选题 执行print (5%3) 语句后,输出的结果是 ( ) 答案:C 第2题单选题 以下选项中,哪一个是乘法运算符?() 答案:C 第3题 单选题 已知x-3,求x//2+x”2的…

PCIE结构拓扑(RC、EP、SWITCH)介绍

1、PCIE典型结构拓扑 (1)个人理解:红色方框部分一般是在芯片内部集成,对外可提供多个PCIE接口; (2)芯片提供的PCIE接口,可以接EP设备、PCI桥、Switch设备; 2、RC(Root Complex) 个人理解&#x…

【一文吃透归并排序】基本归并·原地归并·自然归并 C++

目录 1 引入情境基本归并排序实现 C 2 原地归并排序2-1 死板的解法2-2 原地工作区2-3 链表归并排序 3 自底向上归并排序4 两路自然归并排序4-1 形式化描述4-2 代码实现 1 引入情境 归并思想:假设有两队小孩,都是从矮到高排序,现在通过一扇门后…

微服务#3 Docker常用命令

Docker 一.初识docker Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像Docker应用运行在容器中,使用沙箱机制,相互隔离 Docker如何解决开…

在树莓派上搭建WordPress博客网站,并内网穿透发布到公网

✨个人主页:bit me👇 目 录 🐾概述💐安装 PHP🌸安装MySQL数据库🌷安装 Wordpress🍀设置您的 WordPress 数据库🌹设置 MySQL/MariaDB🌻创建 WordPress 数据库 &#x1f33…

pga_aggregate_limit和process关系

之前部署19c时,配置pga_aggregate_limit都是直接配置成0了,配置processes的大小也比较随意,上周维护一个客户安装的环境,重启数据库数据库时告警了,才第一次认真对面了 SYSorcl1> startup ; ORA-00093: pga_aggreg…

鼠标拆卸方法、鼠标按键噪声大解决办法(为按钮加润滑脂)

文章目录 今天我买了一款acer鼠标,发现按键声音有点大,想给它的按钮上一点缓冲脂,这个缓冲脂本来我是买来润滑机械键盘轴体用的,刚好也能用上。 这是我的鼠标外壳结构,我拆卸的时候没注意,给我拆坏了&…

SRP中的shader

SRP中的shader 在Unity中使用SRP时,我们需要使用HLSL来编写shader。HLSL语法与GLSL类似,在使用HLSL的地方我们需要用HLSLPROGRAM和ENDHLSL来包裹: Shader "My Pipeline/Unlit" {Properties {}SubShader {Pass{HLSLPROGRAM#pragma …

MySQL访问方法

访问方法(访问类型) Const 通过主键或者唯一二级索引来定位到唯一一条满足条件的数据的访问方法称为const。特别指出,如果主键中有两个列l1和l2,查询条件中只有l1的话访问方法就不是const,因为通过l1并不能确定唯一一条…

VisualStudio如何配置PCL点云库?

文章目录 0.引言1.准备PCL点云库2.VisualStudio相关设置3.配置PCL点云库4.测试PCL 0.引言 因笔者课题涉及点云处理,需要通过PCL进行点云数据分析处理,查阅现有网络资料,实现了VisualStudio2015(x86)配置PCL1.8.1点云库,本文记录实…

Python——pyqt-auto-tool自动化小工具(源码)

目录 一、演示视频 二、代码包 三、使用步骤 四、总结 一、演示视频 pyqt-auto-tool自己乱改的自动化小工具_哔哩哔哩_bilibili今天教资考试完,花半天自己乱改的自动化小工具pyqt-auto-tool,二开1、auto-tool原作者:https://www.bilibil…

学习通项目需要用到的

思路: 把长连接弄好课堂详细页面可以看到班级的所有学生,双击学生弹窗,可以确认从该课程中移除学生教师可以在班级详细页面通过输入学生的id,将学生加入该班级做好签到的页面,输入签到标题,选择签到的结束…

玩转计算机组成原理--指令系统

目录 一、机器指令 1.1指令的一般格式 1.操作码: 2.地址码 1.2指令字长 二、操作数类型和操作类型 2.1操作数类型 2.2操作类型 三、寻址方式(重要) 3.1指令寻址 1.顺序寻址 2.跳跃寻址 3.2数据寻址 1.立即寻址 2.直接寻址 3.隐含寻址 4.间接寻址 5.寄存器寻址 …

创作星-创意大爆发!AI文案生成器让创作轻松快捷,轻松撰写出热门标题。

一、创作星-创意大爆发!AI文案生成器让创作轻松快捷,轻松撰写出热门标题。 ✨使用“创作星”,让AI帮你生成惊艳的文案! ✨创意大爆发!AI文案生成器让创作轻松快捷,轻松撰写出热门标题。 ✨AI文案神器&…

【Linux指令④】Linux查看日历、时间、打包压缩文件、Linux中的计算器,常用热键 关机指令

Linux指令 ❀date❀cal❀findwhichwhereis ❀grep❀zip/unzip❀tar❀bc❀常用的热键❀关机🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专…