pytest之fixture用法

2023-10-21 08:50
文章标签 用法 pytest fixture

本文主要是介绍pytest之fixture用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、fixture是什么

fixture是pytest用于将测试前后进行预备、清理工作的代码处理机制。
相较于setup和teardown而言,有以下几点优势:

  1. fixture命名更加灵活,局限性较小
  2. conftest.py配置里面可以实现数据共享,不需要import就能自动找到一些配置

二、fixture的scope

  1. (scope=“function”) 每一个函数或方法都会调用,默认就是function
# 示例:1、先定义一个fixture。这个fixture的函数不需要test_开头命名
@pytest.fixture(scope='function')
def  t_func1():print('function级别的前置操作:func1')# 2、在用例里调用这个fixture 
def test_one(t_func1):expect = 1actual = 1assert expect == actual

执行后,在用例调用前会执行fixture里的操作:
在这里插入图片描述

  1. (scope=“class”) 每一个类调用一次
# 示例:1、先定义一个fixture。这个fixture的函数不需要test_开头命名
@pytest.fixture(scope='class',autouse=True)
def t_func2():print('class级别的前置操作:func2')# 2、在用例里调用这个fixture 
class TestClassFixture():def test_one(self):expect = 1actual = 1print('ok')assert expect == actualdef test_two(self):expect = 1actual = 2assert expect == actual

虽然类中有2个方法,但fixture的scope是class,因此只执行一次。
在这里插入图片描述

  1. (scope=“module”) 每一个.py文件调用一次
# 示例:1、先定义一个fixture。scope为module
@pytest.fixture(scope='module',autouse=True)
def t_module():print('module级别的前置操作')#2、py文件中定义一个class一个函数
class TestClassFixture():def test_one(self):expect = 1actual = 1print('ok')assert expect == actualdef test_two(self):expect = 1actual = 2assert expect == actualdef test_three():expect = 1actual = 2assert expect != actual

可以看到,虽然.py文件下存在一个类和一个函数。但只执行了一次前置操作在这里插入图片描述 4. (scope=“session”) 是多个文件调用一次

#1、在conftest.py中定义fixture
@pytest.fixture(scope='session',autouse=True)
def t_session():print('session级的fixture')#2、同一个文件夹,创建2个.py文件
#3、terminal中执行pytest命令

可以看到,test_fixture这个文件下,虽然有test_one和test_two两个py文件,但只执行了一次前置操作。
在这里插入图片描述

  1. fixture的作用范围(执行顺序):session>module>class>function
@pytest.fixture(scope="function")
def t_function():print("我是function fixture")@pytest.fixture(scope="class")
def t_class():print("我是class fixture")@pytest.fixture(scope="module")
def t_moudule():print("我是moudule fixture")@pytest.fixture(scope="session")
def t_session():print("我是session fixture")class TestOrder:def test_order(self,t_function,t_session,t_moudule,t_class):assert 1==1

虽然打乱了顺序,但是执行顺序依然是session>module>class>function
在这里插入图片描述

三、使用conftest管理fixture

  1. conftest.py为固定写法,不可修改名字。使用conftest.py文件方法无需导入
  2. 函数作用于当前文件夹及下属文件,conftest可以放在上层目录,但是要注释掉当前目录的方法,如果方法都一样的话

四、fixture返回数据,解决接口参数依赖

#1、conftest.py文件中定义fixture
@pytest.fixture(scope="function")
def get_params():params = {'key1': 'value1', 'key2': 'value2'}return params#2、用例文件中,使用fixture得到参数
import pytest
import requestsdef test_getparam(get_params):print("测试get请求")#第1种方法r=requests.get('https://httpbin.org/get',params=get_params)#第2种方法key1 = get_params['key1']key2 = get_params['key2']r=requests.get('https://httpbin.org/get',params={'key1':key1, 'key2':key2})print(r.status_code)assert r.status_code == 200res = r.json()assert res['url'] == 'https://httpbin.org/get?key1=value1&key2=value2'assert res['origin'] == '163.125.202.248'assert res['args']['key1'] == 'value1'assert res['args']['key2'] == 'value2'

五、yield做后置操作

#1、conftest文件定义fixture,yield关键字之后可以定义后置操作
@pytest.fixture(scope='function')
def t_func1():print('function级别的前置操作:func1')yieldprint('function级别的后置操作:func1')# 2、用例文件
def test_three(t_func1):expect = 1actual = 2assert expect != actualprint('ok')

在这里插入图片描述

#1、conftest文件定义fixture,yield也可以返回值,但pytest中不常用这个用法
@pytest.fixture(scope='function')
def t_func1():print('function级别的前置操作:func1')yield 'potizo'print('function级别的后置操作:func1')# 2、用例文件
def test_three(t_func1):expect = 1actual = 2assert expect != actualprint('ok')print(t_func1)

在这里插入图片描述

六、fixture的另一种调用方式:uesfixtures

@pytest.fixture(scope='function',autouse=True)
def get_params():params = {'key':'value'}return params    
  1. fixture的调用方式有2种,usefixtures这种无法接受返回值。
  • 第一种,可以接收返回值:
    def test_func(get_params):
    xxx

  • 第二种,无法接收返回值:
    @pytest.mark.usefixtures(‘get_params’)
    def test_func():
    xxx

  1. usefixtures的执行顺序
#1、conftest文件中定义2个fixture
@pytest.fixture(scope='function')
def t_func1():print('function级别的前置操作:func1')yield 'potizo'print('function级别的后置操作:func1')@pytest.fixture(scope='function')
def t_func1_new():print('function级别的前置操作:func1_new')yield 'potizo'print('function级别的后置操作:func1_new')#2、用例文件中使用usefixtures方式调用这两个fixture
@pytest.mark.usefixtures("t_func1")
@pytest.mark.usefixtures("t_func1_new")
def test_usefixtures():print('ok')

执行顺序:靠近方法的那个fixture先调用
在这里插入图片描述
也可以在usefixtures中一次调用多个fixture,用,分割。

@pytest.mark.usefixtures("t_func1","t_func1_new")
def test_usefixtures():print('ok')```

执行顺序如下:
在这里插入图片描述

七、fixture的2个参数:ids和params

# 1、 定义fixture 
#request和params\ids是关键字,不能改
@pytest.fixture(params=["data1","data2"],ids=["case1","case2"])
def params_fixture(request):return request.param
#2、 测试方法调用这个fixture
def test_params(params_fixture):print(params_fixture)

实际工作中很少这样用
在这里插入图片描述

这篇关于pytest之fixture用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/253288

相关文章

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

关于@RequestParam的主要用法详解

《关于@RequestParam的主要用法详解》:本文主要介绍关于@RequestParam的主要用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 基本用法2. 默认值3. 可选参数4. 绑定到对象5. 绑定到集合或数组6. 绑定到 Map7. 处理复杂类

SQL中的CASE WHEN用法小结

《SQL中的CASEWHEN用法小结》文章详细介绍了SQL中的CASEWHEN函数及其用法,包括简单CASEWHEN和CASEWHEN条件表达式两种形式,并通过多个实际场景展示了如何使用CASEWH... 目录一、简单CASE WHEN函数:二、CASE WHEN条件表达式函数三、常用场景场景1:不同状态展

Linux find 命令完全指南及核心用法

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧... 目录一、基础搜索模式1. 按文件名搜索(精确/模糊匹配)2. 排除指定目录/文件二、根据文件类型筛选三、时间

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.