【pytest-fixture】十、fixture的模块化和在类和模块中使用fixture usefixtures

我基本上是跟着官网去学习fixture,自己先看并学了一遍,为了方便后续查看和记忆,所以将学习笔记记录下来,如果有不对的地方,欢迎大家评论区指出。

1.fixture的模块化

1.1介绍

除了在测试函数中使用fixture,fixture函数本身也可以使用其他fixture。这有助于您的夹具的模块化设计,并允许在许多项目中重复使用特定于框架的夹具.例如:
我们可以将一些公共操作抽取出来,如我们需要用到5个用户信息,在多个地方需要用到,然后我们就可以抽取出一个fixture函数,对这5个用户信息进行管理.
再或者我们可以把大部分前置后置操作通过引入fixture的方式抽取,统一进行管理

1.2示例代码

文件结构:
fixtures
    open_chrome.py

import pytest


@pytest.fixture()
def open_chrome():
    print("打开浏览器")
    yield
    print("关闭浏览器")

test_demo.py

# 这里必须引入,不引入就会报错
from fixtures.open_chrome import open_chrome


def test_demo(open_chrome):
    print("测试用例")

1.3 运行结果

在这里插入图片描述

1.4结果分析

我们可以看到,我们单独定义了一个fixtrues包,用于管理我们所有的fixture,讲fixture进行模块化管理,这样我们如果有公共的fixture或者函数的前置都可以提取到这个包下面进行管理.

注意:我们在使用这些包的时候需要引入,如果不引入就会报错
错误示例:

# from fixtures.open_chrome import open_chrome


def test_demo(open_chrome):
    print("测试用例")

在这里插入图片描述

2.在类和模块中使用fixture usefixtures

2.1介绍

前面我们介绍了使用fixture的其中一个方法,就是通过参数的方式去请求fixture函数.但我们还有另外一种方法,就是不需要直接在参数中去访问fixture对象.那就是通过usefixtures的方式去请求fixtrue函数.

2.2代码示例

文件名: test_demo.py

import pytest


@pytest.fixture
def open_chrome():
    print("打开浏览器")
    yield
    print("关闭浏览器")


@pytest.mark.usefixtures('open_chrome')
def test_demo():
    print("测试用例")


@pytest.mark.usefixtures('open_chrome')
class TestDemo(object):
    def test_demo01(self):
        print("测试用例01")

    def test_demo02(self):
        print("测试用例02")

2.3运行结果

在这里插入图片描述

2.4结果分析

我们可以看到,我们通过usefixtures引入fixture一样可以请求成功,那么它与参数方式的引入有什么区别呢?
1.通过参数方式请求fixture是可以拿到返回值的,而通过usefixtures请求fixture是拿不到返回值的.
2.参数方式不能用在类中,只能在类中的各函数都写上请求参数,但用usefixtures是可以在类上使用的,然后根据作用域来决定执行次数,如果是函数级别的,那就是类下有多少个函数就执行多少次,如果是类级别的,那就执行一次

2.5usefixtures请求多个fixture函数

我们直接通过代码来展示

  • 示例代码
    文件名: test_demo.py
import pytest


@pytest.fixture()
def open_chrome():
    print("打开浏览器")
    yield "driver"
    print("关闭浏览器")


@pytest.fixture
def login():
    print("登陆")
    yield "token"
    print("退出登录")


@pytest.mark.usefixtures('open_chrome', "login")
def test_demo():
    print("测试用例")
  • 运行结果
    在这里插入图片描述
  • 分析结果

usefixtures请求多个fixture函数和参数方式差不多,有多少个fixtrue函数就写多少个字符串,但需要注意的名字必须一致,还有就是要注意顺序.执行顺序也和参数化一样,从左往右依次执行(排除执行第一个就把第二个先执行了的情况)

2.6多个usefixtures去分别调用fixture

我们直接通过代码来展示

  • 示例代码
    文件名: test_demo.py
import pytest


@pytest.fixture()
def open_chrome():
    print("打开浏览器")
    yield "driver"
    print("关闭浏览器")


@pytest.fixture
def login():
    print("登陆")
    yield "token"
    print("退出登录")


@pytest.mark.usefixtures("login")
@pytest.mark.usefixtures('open_chrome')
def test_demo():
    print("测试用例")
  • 运行结果
    在这里插入图片描述
  • 结果分析

执行的结果和2.5差不多,但需要注意顺序,放在最下面的先执行,最上面的后执行,执行顺序是从下往上.但更推荐使用2.5这种方式,装饰器写多了也并不太好看,查看执行顺序也麻烦.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值