Pytest框架 — 11.Fixture装饰器的使用(一)

2023-12-05

1、Fixture装饰器的用途

  1. 做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用Fixture来实现。

  2. 测试用例的前置条件可以使用Fixture实现,比直接使用Pytest框架的 setup() teardown() 函数更加灵活。

  3. Fixture是Pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制!

  4. Fixture可以实现Unittest不能实现的功能,比如:Unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是Fixture却可以解决这个问题。

2、Fixture参数说明

可以使用 pytest.fixture() 查看 fixture() 函数的源码和所需要的参数,同Fixture装饰器需要的参数一样。

fixture(scope="function", params=None, autouse=False, ids=None, name=None):  

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386

2023最新pytest接口自动化测试框架,三天带你精通pytest,带你写出最好的代码!(已更新2023新版)_哔哩哔哩_bilibili 2023最新pytest接口自动化测试框架,三天带你精通pytest,带你写出最好的代码!(已更新2023新版)共计32条视频,包括:1、Pytest简介、2、Pytest之pytest测试用例的运行方式、3、Pytest之pytest执行测试用例的顺序是怎样的呢?等,UP主更多精彩视频,请关注UP账号。 icon-default.png?t=N7T8 https://www.bilibili.com/video/BV1py4y1t7bJ/?spm_id_from=333.337.search-card.all.click

说明:

  • scope :表示被 @pytest.fixture() 装饰器所标识方法的作用域。

    作用域有四个级别,函数 function(默认) ,类 class ,模块 module ,包 package/session

    说明: function 作用域包含函数和方法。

  • params :一个可选的参数列表,用于做Fixture的参数化。

    可将数据提供给其他的Fixture,或者所有测试使用它 。

  • autouse autouse=Ture 则开启自动使用Fixture功能,也是调用Fixture函数一种方法。

    Fixture装饰器会自动执行作用域范围内的所有用例的前后置。

    autouse 默认值为Flase。

  • ids :一个字符串id的列表,即当使用params参数化时,给每一个值设置一个变量名。

    如果没有提供ID,params将自动生成ID 。

  • name :表示给被 @pytest.fixture() 装饰器修饰的方法取一个别名,调用时可以使用别名调用。

    默认为装饰器所装饰的函数名称。

3、Fixture装饰器简单应用

使用Fixture装饰器来实现部分用例的前后置

比如:我们在测试一个操作流程时,有的测试用例需要登陆,有的测试用例执行不需要用户登陆。

如果要直接使用 setup_function() 前置函数来实现,该文件中的所有用例执行前都需要进行用户登陆。

如下示例:

import pytest

# 函数级,前置函数
def setup_function():
    print("用户登陆")

def test_add_cart():
    print("添加购物车--需要登录")


def test_add_address():
    print("添加收货地址--需要登录")


def test_browser_goods():
    print("浏览商品--不需要登录")


if __name__ == '__main__':
    pytest.main()
    
"""
执行结果:

用户登陆
添加购物车--需要登录
PASSED用户登陆
添加收货地址--需要登录
PASSED用户登陆
浏览商品--不需要登录
PASSED
"""

我们可以使用Fixture装饰器来实现部分用例的前后置,如下示例

"""
1.学习目标
    掌握pytest  fixture定义
2.操作步骤
    1.在定义的函数前添加装饰器
        @pytest.fixture()
    2.编写函数
        @pytest.fixture()
        def 函数名():
            代码
    3.使用fixture
        在测试用例中,将上面定义的函数名称,当做参数传入到测试用例中即可
        def test_xx(函数名):
            用例步骤

"""
import pytest


# 步骤1
@pytest.fixture()
def login():  # 步骤3
    print("输入账号,密码,进行登录")


def test_add_cart(login):  # 步骤3
    print("添加购物车--需要登录")


def test_add_address(login):  # 步骤3
    print("添加收货地址--需要登录")


def test_browser_goods():
    print("浏览商品--不需要登录")


if __name__ == '__main__':
    pytest.main()

"""
执行结果:

输入账号,密码,进行登录
添加购物车--需要登录
PASSED输入账号,密码,进行登录
添加收货地址--需要登录
PASSED浏览商品--不需要登录
PASSED

只有添加购物车,添加收货地址的用例,执行了登陆操作
"""

提示:Fixture装饰器既可以实现部分用例的前后置,也可以是现实全部用例的前后置,所以比单独使用前置 setup() 函数和后置 teardown() 函数灵活多了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytest框架 — 11.Fixture装饰器的使用(一) 的相关文章

  • Next.js API 路由神秘地修改 JSON 负载

    由于某种原因 当我通过 Postman 作为原始文本发送 JSON 格式的数据时 没有任何问题 当我通过 Postman 发送与原始 JSON 完全相同的数据时 区别应该只是content type标头是application json代替
  • 用于多部分/表单数据的 POSTMAN

    如何将 POSTMAN 用于 Multipart form data 它具有自定义标头来测试我的控制器 该控制器采用 2 个文件作为参数 public controller MultipartFile files POST HTTP 1 1
  • 模拟导入失败

    我该如何制作import pkg失败moduleA py 我可以打补丁pkg如果从中导入某些内容则会失败 否则不会失败 test py import os import moduleA from unittest mock import p
  • sqlalchemy:无法在拆卸时删除数据库

    我正在尝试使用 pytest 进行 sqlalchemy 但遇到以下问题 pytest fixture scope function def my session my db request from my models import Se
  • 在参数化中传递 pytest 夹具

    通过在 pytest mark parametrize 中传递 conftest py 中定义的装置 我收到以下错误 pytest alist 0220 0221 test 1 py v s NameError name alist is
  • 单元测试 python 代码,其中 configparser 从配置文件中读取

    我是 python 单元测试的新手 我学习并进行了示例单元测试 其中方法接受输入并返回输出 但对于下面提到的代码 我有一些疑问 如何在unittest中模拟init方法的configparser 路径 config program cfg
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py
  • Pytest:如何使用从夹具返回的列表来参数化测试?

    我想使用由固定装置动态创建的列表来参数化测试 如下所示 pytest fixture def my list returning fixture depends on other fixtures return a dynamically
  • Uber API 不允许来自本地主机的请求

    当我使用 Uber API 和 localhost 时 我收到以下错误 请求的资源上不存在 Access Control Allow Origin 标头 起源 http 本地主机 8080 http localhost 8080 因此不允许
  • pytest.raises(Error) 如何工作?

    对 Python 来说是新手 但我试图理解这段代码 with pytest raises ValueError group adjust vals grps 1 grps 2 weights 看完之后本教程与 http effbot org
  • Pytest 固定装置的范围“类”在每个方法上运行

    我正在尝试使用 Pytest 创建一个测试环境 这个想法是将测试方法分组到类中 对于每个班级 小组 我想附上config将要参数化的夹具 这样我就可以使用 配置 A 运行所有测试 然后使用 配置 B 运行所有测试 依此类推 但同时 我也想要
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • pytest 与 setup.py 测试

    我使用说明 描述了here https pytest org latest goodpractices html integrating with setuptools python setup py test pytest runner
  • GET 错误:ModuleNotFoundError:没有名为“api”的模块

    当我尝试运行 pytest 命令时出现错误 错误是当我在 docker 上运行应用程序时 当我在本地执行时 它可以工作 还有另一个好奇心 swagger 和 de requests 工作正常 只是测试文件不行 我已经尝试过 python m
  • 无法验证模式并正确使用additionalProperties

    我正在尝试验证我的 JSON 架构并使用 extraProperties false 来确认没有其他属性 我的responseBody看起来像这样 id 1234567890987654 email email protected cdn
  • 在 jupyter 笔记本中运行 pytest 测试函数

    我正在制作有关 python 测试选项的演示 我想要演示的技术之一是 pytest 我计划使用 jupyter ipython 笔记本进行演示 理想情况下 我希望能够在单元格中定义一个测试函数 然后使用 pytest 运行该函数 这样我就可
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 如何使用 pytest 和模拟为使用 Python 的 http.client 库的函数创建单元测试?

    如何使用 pytest 为以下函数编写模拟测试 import http client def get response req type host sub domain payload None headers None body None
  • 使用邮递员发送cookie

    我阅读了用邮递员用cookie发送请求的手册 由于打包的应用程序与浏览器分开运行在沙箱中 因此 无法访问浏览器内设置的cookie 这个限制可以 也可以使用拦截器扩展来克服 邮递员路由所有 通过拦截器请求 然后拦截器使用浏览器上下文 发送请
  • 使用 JWT 创建 PostMan GET 请求

    我是 PostMan 的新手 通常我使用curl 这是获得 JTW 的一个 curl X POST H X Requested With XMLHttpRequest H Content Type application json H Ca

随机推荐

  • SSM 线上知识竞赛系统-计算机毕设 附源码 27170

    SSM线上知识竞赛系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化 电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用 信息时代的到来已成为不可阻挡的时尚潮流 人类发展的历史正进入一个新时代 在现实运用中 应
  • FL Studio2024中文语言版水果编曲软件

    FL Studio21 2这款软件在国内被广泛使用 因此又被称为 水果 它提供音符编辑器 可以针对作曲者的要求编辑出不同音律的节奏 例如鼓 镲 锣 钢琴 笛 大提琴 筝 扬琴等等任何乐器的节奏律动 此外 它还提供了方便快捷的音源输入 对于在
  • “丝路电商”与泛欧在线公共采购平台Peppol

    近期上海商务委员会公布 关于在上海市创建 丝路电商 合作先行区的方案 以下简称方案 方案中提出 全面贯彻落实党的二十大精神 立足新发展阶段 完整 准确 全面贯彻新发展理念 加快构建新发展格局 统筹发展和安全 发挥上海在改革开放中的突破攻坚作
  • Springboot养老院信息管理系统的开发-计算机毕设 附源码 27500

    Springboot养老院信息管理系统的开发 摘 要 随着互联网趋势的到来 各行各业都在考虑利用互联网将自己推广出去 最好方式就是建立自己的互联网系统 并对其进行维护和管理 在现实运用中 应用软件的工作规则和开发步骤 采用Springboo
  • 分治—快速选择算法

    文章目录 215 数组中的第K个最大元素 1 题目 2 算法原理 3 代码实现 LCR 159 库存管理 III
  • 分治-归并算法——LCR 170. 交易逆序对的总数

    文章目录 0 归并排序 1 题目 2 算法原理 3 代码实现 0 归并排序 归并排序是典型的分治 将数组分成若干个子数组 数组两两比较 不是很清楚的 可以查看此篇文章 数据结构 七大排序 这里以力扣 9
  • 分治-归并排序

    文章目录 315 计算右侧小于当前元素的个数 1 题目 2 算法原理 3 代码实现 493 翻转对
  • 小学全科教师是什么意思

    作为一名小学全科教师 我们的目标是提供全面的教育 帮助孩子们在各个学科领域中取得均衡发展 我们不仅教授语文 数学等传统学科 还注重培养孩子们的独立思考能力 创新精神和社交技巧 下面 我将从几个方面阐述小学全科教师的重要性和职责 小学全科教师
  • xampp环境安装

    XAMPP是完全免费且易于安装的Apache发行版 其中包含Apache MariaDB PHP和Perl 类似XAMPP的服务器套件还有很多 我用过的还有UPUPW 它们都极大的简化了开发环境的配置 下载链接 Download XAMPP
  • SiLM5350SBBCA-DG一款可提供分离输出 隔离门极驱动器完美UCC5350SBDR

    SiLM5350SBBCA DG是一款适用于IGBT MOSFET的单通道 隔离门极驱动器 具有10A拉电流和10A灌电流驱动能 力 提供分离输出 可单独控制 上升时间和下降时间 在SOP8W封装中具有5000 VRMS隔离耐压 在 SOP
  • 优维产品最佳实践第17期:善用控制台

    背 景 遇到页面报错时 是不是感到困扰 不知如何解决 页面响应缓慢时 是否感到迷茫 不清楚从何入手排查 面对主机高负载时 是不是觉得确认异常根因很有挑战 本期最佳实践为您讲解如何通过控制台排查定位 页面报错时 获取traceId确认报错组件
  • 【学习笔记】机器学习——GAN

    提出于2014年 GAN由两个神经网络组成 一个试图生成看起来与训练数据相似数据的 生成器 以及一个试图从虚假数据中分辨出真实数据的 判别器 生成器和判别器在训练期间相互竞争 对抗训练 训练竞争性网络 是一种重要的机器学习思想 生成器 G
  • CVE-2016-2510&CVE-2017-5586 BeanShell漏洞

    前言 首先我们需要了解BeanShell具体是做什么 BeanShell 是一种轻量级的可嵌入式脚本语言 用于在 Java 环境中执行脚本代码 它提供了一种简单 灵活的方式来扩展和定制 Java 应用程序的行为 允许开发人员动态地执行和评估
  • 2024年十大值得关注的编程语言

    探索2024年最有影响力的编程语言 Python的多功能无与伦比 JavaScript在Web领域的统治地位 Rust的高效性 等等 通过实际操作示例 发现适合您编程之旅的最佳选择 在技术世界不断变化的沙漂中导航是一段令人兴奋的旅程 充满了
  • react之封装有无Token(路由权限控制)的高阶组件

    TOC 前景 有些路由页面内的内容信息比较敏感 如果用户没有经过登录获取到有效Token 是没有权限跳转的 根据Token的有 无控制当前路由是否可以跳转就是路由的权限控制 技术方案 实现步骤 1 在 components 目录中 创建 A
  • Comparator接口

    Comparator接口 Comparator 是 Java 中用于比较对象的接口 它允许开发者实现自定义的比较逻辑 以用于对对象进行排序或者确定它们的顺序 主要方法 Comparator 接口中包含一个抽象方法 int compare T
  • MN316 OpenCPU丨HTTP使用介绍

    HTTP Hyper Text Transfer Protocol 即超文本传输协议 是一个简单的请求 响应协议 通常运行在 TCP 之上 它指定了客户端可能发送给服务器消息类型以及得到什么类型响应 HTTPS Hyper Text Tra
  • docker 内查看文件时间 docker动态查看日志最后100行

    ls all docker动态查看日志最后100行 docker logs f t tail 1 chat2db docker logs OPTIONS CONTAINER Options details 显示更多的信息 f follow
  • Android 14 CarAudioService

    文章目录 新功能 AudioMirring oemCarService 新功能 AudioMirring 简单的说就是两个bus输出的是同一个音频数据 构建的流程是 一个输入src的bus 和两个输出dst的bus 通过setParamte
  • Pytest框架 — 11.Fixture装饰器的使用(一)

    1 Fixture装饰器的用途 做测试前后的初始化设置 如测试数据准备 链接数据库 打开浏览器等这些操作都可以使用Fixture来实现 测试用例的前置条件可以使用Fixture实现 比直接使用Pytest框架的 setup 和 teardo