8、Pytest之conftest.py

以下内容纯属个人理解,如有不足,还请指正,转载请注明出处,喜欢请动动小指头点赞评论哦(▽)!

conftest.py是什么?

conftest.py是fixture函数的一个集合,可以理解为公共的提取出来放在一个文件里,然后供其它模块调用。不同于普通被调用的模块,conftest.py使用时不需要导入,Pytest会自动查找

conftest.py使用场景

如果我们有很多个前置函数,写在各个py文件中是不很乱?再或者说,我们很多个py文件想要使用同一个前置函数该怎么办?这也就是conftest.py的作用

conftest.py使用原则
  1. conftest.py这个文件名是固定的,不可以更改。
  2. conftest.py与运行用例在同一个包下,并且该包中有__init__.py文件使用的时候
  3. 不需要导入conftest.py,会自动寻找。
conftest.py使用举例

conftest.py文件(scope=“session”)

# -*- coding:utf-8 -*-
'''
@Author     : 测试工程师Jane
@FileName   : conftest.py
@Description:
'''
import pytest
@pytest.fixture(scope="session")
def login():
    print("输入账号密码")
    yield
    print("清理数据完成")

case文件:

# -*- coding:utf-8 -*-
'''
@Author     : 测试工程师Jane
@FileName   : a.py
@Description:
'''

import pytest
class TestLogin1():
    def test_1(self, login):
        print("用例1")

    def test_2(self):
        print("用例2")

    def test_3(self, login):
        print("用例3")
if __name__ == '__main__':
    pytest.main()

运行结果
在这里插入图片描述
从上图可以看出,conftest.py内的fixture方法的作用范围是session,调用时,整个.py文件只会调用一次

conftest.py作用域

我们先来看下目录结构
在这里插入图片描述
内层case文件:b.py

'''
@Author     : 测试工程师Jane
@FileName   : b.py
@Description:
'''
import pytest
class TestLogin1():
    #调用了内层fixture
    def test_1(self, login2):
        print("用例1")
    #调用了外层fixture
    def test_3(self, login):
        print("用例3")
if __name__ == '__main__':
    pytest.main()

内层conftest.py

# -*- coding:utf-8 -*-
'''
@Author     : 测试工程师Jane
@FileName   : conftest.py.py
@Description:
'''
import pytest
@pytest.fixture(scope="session")
def login2():
    print("内层fixture前置")

外层case:a.py

'''
@Author     : 测试工程师Jane
@FileName   : b.py
@Description:
'''
import pytest
class TestLogin1():
    #调用了内层fixture
    def test_1(self, login2):
        print("用例1")
    #调用了外层fixture
    def test_3(self, login):
        print("用例3")
if __name__ == '__main__':
    pytest.main()

外层conftest.py

# -*- coding:utf-8 -*-
'''
@Author     : 测试工程师Jane
@FileName   : conftest.py
@Description:
'''
import pytest
@pytest.fixture(scope="session")
def login():
    print("外层fixture")

运行内层b.py
在这里插入图片描述
由上图过行结果可以看出,内外层的conftest.py都可以被找到并被调用执行
我们再来运行一下外层case,a.py
在这里插入图片描述
可以看到,外层调用内层的fixture是失败的

由以上运行结果可以总结出:

  • conftest.py的作用域与Python变量作用域相同
  • 内层包内conftest.py不允许被其它包的测试类或方法使用,相当于本地变量
  • 外层conftest.py可被内层测试类和方法使用,相当于全局变量

以上为内容纯属个人理解,如有不足,欢迎各位大佬指正,转载请注明出处!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值