Pytest测试框架(二):fixture 方法等相关操作--自定义测试用例的前置后置条件

news2025/2/25 11:54:13

pytest中的fixture:

  fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。

  可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。类似unittest中的setup和teardown功能。

fixture方法详解:

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

scope: 作用范围,设置范围后,会根据设置的范围去触发执行。

  可选范围如下:

  • function:每个方法(函数)都会执行一次。(默认)
  • class:每个类都会执行一次。类中有多个方法调用,只在第一个方法调用时执行
  • module:一个.py文件执行一次。一个.py文件可能包含多个类和方法
  • package/session:多个文件调用一次,可以跨.py文件

params:传入参数,接收一个列表,列表中每个数据都作为用例的输入

autouse:在一个session内所有的test都会自动调用当前的fixture,默认为false

ids:测试字符串id的列表,每个测试字符串id对应于params,默认为参数值

name:fixture的名称,默认为装饰函数的名称


fixture方法中的 scope 应用

scope参数:function(默认)  每个方法(函数)都会执行一次

代码示例:

import pytest


# fixture方法 类似unittest中的setup和teardown功能
@pytest.fixture()
def fixtrue_function():
    print("测试用例开始执行之前执行",end=" ")
    yield
    print(' '+"测试用例执行之后执行",end=" ")

class TestDemo03:
    def test_case_01(self,fixtrue_function):  # 测试用例中引用 fixture 函数
        print('exec test_case_031',end=' ')
        assert 1+3 == 4

    def test_case_02(self,fixtrue_function):  # 测试用例中引用 fixture 函数
        print('exec test_case_032',end=' ') 
        assert 8-0 == 8

执行效果:

scope参数: class   每个类都会执行一次。类中有多个方法调用,只在第一个方法调用时执行

代码示例:

import pytest


# fixture方法 类似unittest中的setup和teardown功能
@pytest.fixture(scope='class')
def fixtrue_function():
    print("测试用例开始执行之前执行",end=" ")
    yield
    print(' '+"测试用例执行之后执行",end=" ")

class TestDemo03:
    def test_case_01(self,fixtrue_function):  # 测试用例中引用 fixture 函数
        print('exec test_case_031',end=' ')
        assert 1+3 == 4

    def test_case_02(self,fixtrue_function):  # 测试用例中引用 fixture 函数
        print('exec test_case_032',end=' ')
        assert 8-0 == 8

执行效果:

scope参数: module   一个.py文件执行一次。一个.py文件可能包含多个类和方法

import pytest


# fixture方法 类似unittest中的setup和teardown功能
@pytest.fixture(scope='module')
def fixtrue_function():
    print("测试用例开始执行之前执行",end=" ")      # 初始化操作
    yield
    print(' '+"测试用例执行之后执行",end=" ")     # 清理操作

class TestDemo03:
    def test_case_01(self,fixtrue_function):  # 测试用例中引用 fixture 函数
        print('exec test_case_031',end=' ')
        assert 1+3 == 4

    def test_case_02(self,fixtrue_function):  # 测试用例中引用 fixture 函数
        print('exec test_case_032',end=' ')
        assert 8-0 == 8

class TestDemo04:
    def test_case_01(self,fixtrue_function):
        print('exec test_case_041',end=' ')
        assert 1+3 == 4

    def test_case_02(self,fixtrue_function):
        print('exec test_case_042',end=' ')
        assert 8-0 == 8

执行效果:

scope参数:package/session  多个文件调用一次,可以跨.py文件

同conftest.py文件的效果一样,

fixture方法中的 autouse 应用

autouse:在一个session内所有的test都会自动调用当前的fixture,默认为false

代码示例:

每次在测试用例中引用fixtrue函数比较麻烦,可以使用autouse=True,可自动调用当前的fixtrue

import pytest


# fixture方法 类似unittest中的setup和teardown功能
@pytest.fixture(scope='class',autouse=True)
def fixtrue_function():
    print("测试用例开始执行之前执行",end=" ")      # 初始化操作
    yield
    print(' '+"测试用例执行之后执行",end=" ")     # 清理操作

class TestDemo03:
    def test_case_01(self):
        print('exec test_case_031',end=' ')
        assert 1+3 == 4

    def test_case_02(self):
        print('exec test_case_032',end=' ')
        assert 8-0 == 8

执行效果:

fixture方法中的 name 应用

 name:fixture的名称,默认为装饰函数的名称

代码示例:

import pytest


# fixture方法 类似unittest中的setup和teardown功能
@pytest.fixture(scope='class',name='f1')  # name: fixture的名称,默认为装饰函数的名称
def fixtrue_function():
    print("测试用例开始执行之前执行",end=" ")      # 初始化操作
    yield
    print(' '+"测试用例执行之后执行",end=" ")     # 清理操作

class TestDemo03:
    def test_case_01(self,f1):
        print('exec test_case_031',end=' ')
        assert 1+3 == 4

    def test_case_02(self):
        print('exec test_case_032',end=' ')
        assert 8-0 == 8

执行效果:

fixture方法中的 params和ids 应用

params:传入参数,接收一个列表,列表中每个数据都作为用例的输入

ids:测试字符串id的列表,每个测试字符串id对应于params,默认为参数值

代码示例:

params 是传入参数的,ids是为传入的参数命名的,如下面代码:

示例1:

import pytest

# params 传入列表参数[1,2,3,4,5],ids为列表参数中的每个值命名,如ids中的num1 == params中的1
@pytest.fixture(params=[1,2,3,4,5],ids=['num1','num2','num3','num4','num5'])
def fixtrue_function(request):  # fixtrue_function函数中的形参request是固定值也是必填的
    return request.param

class TestDemo04:
    def test_case(self,fixtrue_function):
        print('exec test_case,use %d'%fixtrue_function ,end=' ')
        assert True

示例2:

import pytest

@pytest.fixture(params=[(1,2,3),(4,5,9),(10,20,30)],ids=['num1','num2','num3'])
def fixtrue_function(request):
    return request.param

class TestDemo04:
    def test_case(self,fixtrue_function):
        print('%d + %d ?= %d'%(fixtrue_function[0],fixtrue_function[1],fixtrue_function[2]),end=' ')
        assert fixtrue_function[0] + fixtrue_function[1] == fixtrue_function[2]

执行效果:

示例1效果:

 示例2效果:

 

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

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

相关文章

如何用C#制作 微信个人机器人

打包下载..https://github.com/wechaty/dotnet-wechaty在windows上安装docker,由于可能不是专业版windows10,可能会遇到一系列问题,百度能解决。可以参考 win10安装docker(适用于windows家庭版)_一起玩编程的博客-CSDN…

基于jsp+mysql+SSM学生兼职信息网站-计算机毕业设计

项目介绍 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 硬件环境: windows 7/8/10 1G内存以上 管理员角色…

系统的混乱并非业务本身之复杂,我们并不擅长处理『简单』

作者:聂晓龙 一、前言 一群高智商青年在餐厅吃饭,餐桌上一个瓶盖标识为盐的瓶子里装的是胡椒粉,而标识为胡椒粉的瓶子里装的却是盐,他们想出了一个充满才气的方案来完成对调--仅需要一张餐巾纸、一根吸管和两个空碟子。当他们叫来…

Jmeter 性能测试入门 ——性能插件介绍

目录 一、前言 1、首先,JMeter提供了三个基本的线程组,分别为: 2、其他线程组可以通过集成插件的方式使用,包括: 二、集成插件下载安装 1、下载地址:jmeter-plugins.org 2、安装:下载后文件为plugins…

nodejs+vue015疫情社区管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可…

Python自学教材推荐 初学者必看

Python是一种面向对象、解释性的高级程序语言,它已经被应用在众多领域,因此学习Python变得越来越有必要。传智播客针对编程零基础的初学者,编著出版了高质量的Python自学教材——《Python快速编程入门》。下面我将把这本书推荐给大家&#xf…

陈天老师的Rust培训(1)学习笔记

https://tyrchen.github.io/rust-training/ 跟C互操作时,加上上面图片的宏,rust会根据你的各个域的内存的占用自动去调整内存中的位置,让你的内存占用是最优的,而且rust在生成数据结构的结构的时候,它会做一些padding&…

新零售@2022: 调料、精酿、预制菜

【潮汐商业评论/原创】 圣诞节临近,刚刚下班的Emily想着好久没有与闺蜜见面了,于是相约着过平安夜。 她顺手就打开盒马APP下单了适合女生的微醺精酿,同时发现零售平台上新了一款可以用来拌蔬菜的中式沙拉川式椒麻汁,想起中午做饭…

常见音视频编码格式

1、常见的音频编码格式 MP3 这种压缩方式的全称叫MPEG Audio Layer3,MP3是利用MPEG Audio Layer 3的技术,将音乐以1:10甚至1:12 的压缩率,压缩成容量较小的file,换句话说,能够在音质丢失很小的情况下把文件压缩到更小的程度。而且…

收获一个python识别率超级高的OCR包,值得推荐

他的开源项目地址:https://github.com/sml2h3/ddddocr 他支持的类型还是挺多的: 本次更新新增了两种滑块识别算法,算法非深度神经网络实现,仅使用opencv和PIL完成。 算法1 小滑块为单独的png图片,背景是透明图&…

大一新生HTML期末作业——大学生抗疫感动专题网页设计作业

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

栈,队列和链表三者之间的关系与区别

最近一直在学习算法,刷算法题,但是自从大学毕业以来,数据结构的知识都还给老师了,只会个数组,所以前期刷的题目也都是有关数组的 最近跟着小册重学了一遍数据结构,今天就记录一下栈,队列和链表三者之间的关…

MindFusion.Diagramming for JavaScript V4.2.4

MindFusion.Diagramming for JavaScript V4.2.4 现在支持使用套索工具进行缩放的多种方式。2022 年 12 月 15 日 - 15:44新版本特征 套索缩放工具- 该控件现在支持使用套索工具进行缩放的多种方式。新的“PanAndModify”行为允许您在鼠标指针悬停在某个项目上或平移视图时进行选…

HTTPS工作过程!

HTTPS了解 HTTPS 也是一个应用层协议, 是在 HTTP 协议的基础上引入了一个加密层。HTTP 协议内容都是按照文本的方式明文传输的, 这就导致在传输过程中出现一些被篡改的情况。如运营商劫持。 HTTPS工作过程 ① 既然要保证数据安全, 就需要进行 “加密”。…

【python】如何把你的python包发布出去(pip install)

python:如何把你的python包发布出去(pip install) 介绍 实际上分为两步 打包发布 我们要发布的网站是https://pypi.org/。也就是用户通过pip install XXX,就可以安装你的包。 1 通过setuptools打包 需要我们编写setup.py f…

数据库的事务

作者:~小明学编程 文章专栏:MySQL 格言:目之所及皆为回忆,心之所想皆为过往 目录 什么是事务? 事务的特性 原子性 一致性 持久性 独立性 事务之间的影响 脏读 不可重复读 幻读 数据库的隔离级别 读未提交…

kvm介绍

kvm里主要去介绍它的虚拟化技术,包括云计算的组成和云计算的背景。 kvm的运行原理,虚拟机的创建,虚拟机的生命周期管理。 云计算的定义 它不是一种技术,它是一种收费模式,就是通过互联网把一些主机的硬件&#xff0…

2021年我国企业服务市场投融资概况 技术服务单笔规模最大 早期融资笔数最多

一、企业服务投融资年度概况 据相关数据显示,2021年我国企业服务市场共发生2417笔投融资事件,其中,1753笔项目已披露融资金额。从月度分布来看,3月、6月、7月、8月和12月的融资数量均在200起以上,其中,12月…

[附源码]Python计算机毕业设计高校学生体温管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Python实现:高斯滤波 均值滤波 中值滤波 Canny(边缘检测)PCA主成分分析 直方图规定化 Mean_Shift

Python实现:高斯滤波 均值滤波 中值滤波 Canny(边缘检测)PCA主成分分析 直方图规定化 Mean_Shift(文末附上整合这些函数的可视化界面并且已做打包处理) 1.高斯滤波(以下函数所有的图片路径为方便前来copy的同学&#…