pytest中fixture作用域简单说明


pytest中fixture的scope使用方法

前置条件

在进行讲解之前,需要你有pycharm并且在pycharm中新建一个项目,本文使用项目waimai,然后在项目中新建package,package中新建文件conftest.py,以及test_login.py文件,如下即可
请添加图片描述

conftest.py文件为固定内容,只需修改scope作用域即可

import pytest

"""

"""
# ---------1、登录操作-----
@pytest.fixture(scope="function")
def login_init():
    print('----1.开始执行的登录操作----')
    token = 'token_value'
    yield token  
    print('---登录完成---')
# ---------2、商店初始化操作-----

@pytest.fixture(scope='function')
def shop_init(login_init):
    print('----2.创建商店实例操作----')
    shop_object = login_init+'shop_object'
    yield shop_object  # 返回出去给---测试方法使用
    print ("创建完成")
function

第一种scope=“function”简单理解也就是作用与函数,在test_Login.py中新建一个函数,以及参数化如下:

#test_Login.py
import pytest
@pytest.mark.parametrize('name',["tok","to"])
def test_login(name,shop_init):
    assert name in shop_init
    print ("hhhhh")

打印结果如下:

 ----1.开始执行的登录操作----
----2.创建店铺实例操作----
PASSED                                    [ 50%]
hhhhh
创建完成
---我登录完成---
----1.开始执行的登录操作----
----2.创建店铺实例操作----
PASSED                                     [ 100%]
hhhhh
创建完成

通过调试和结果可以看出:

作用域如果为function,传入function的每个值都会在固件中进行执行一遍

class

test_Login.py文件内容修改为:

#test_login.py
import pytest

class Test_login():
    @pytest.mark.parametrize('name', ["tok", "to"])
    def test_login(self,name,shop_init):
        assert name in shop_init
        print ("hhhhh")
    @pytest.mark.parametrize('name', ["token", "toke"])
    def test_facking(self,name,shop_init):
        assert name in shop_init
        print ("hhhhh")
if __name__ == '__main__':
    pytest.main()

注:同步修改conftest.py中的scope=“class”

结果如下:

----1.开始执行的登录操作----
----2.创建店铺实例操作----
PASSED                        [ 25%]hhhhh
PASSED                         [ 50%]hhhhh
PASSED                    [ 75%]hhhhh
PASSED                     [100%]hhhhh
创建完成
---我登录完成---

可以看出,在执行类执行只执行一遍fixture中的内容

module

test_login.py中的内容修改为如下:

import pytest

class Test_login():
    @pytest.mark.parametrize('name', ["tok", "to"])
    def test_login(self,name,shop_init):
        assert name in shop_init
        print ("hhhhh")

class Test_lgo():
    @pytest.mark.parametrize('name', ["token", "toke"])
    def test_facking(self,name,shop_init):
        assert name in shop_init
        print ("hhhhh")
if __name__ == '__main__':
    pytest.main()

注:同步修改fixture.py中的作用域为module

结果如下:

----1.开始执行的登录操作----
----2.创建店铺实例操作----
PASSED                        [ 25%]hhhhh
PASSED                         [ 50%]hhhhh

test_Login.py::Test_lgo::test_facking[toke] 
PASSED                      [ 75%]hhhhh
PASSED                       [100%]hhhhh
创建完成
---我登录完成---

可以看出是作用与整个python文件上的

package

这个就不多赘述了,就是作用与整个package文件夹

目录结构如下图即可:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IBsaRjwG-1655627779387)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220619163110382.png)]

session

这个也不多做赘述,不是耍流氓关键都差不多,就是在我们所有执行完成也就完成了,这样一个过程我们就叫做一个session他的层级是大于package的

总结

整体作用域大小为:
session>package>module>class>function
具体在使用过程中可以根据情况进行酌情选择,文档中可以介绍不是特别详细理解思路自己进行试验即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值