栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pytest的fixture

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pytest的fixture

pytest的fixture fixture 和 普通前后置条件的区别

fixture 的作用和 setup / teardown 功能类似,都是在case执行前和执行后自动执行的,但是他更加灵活

1、setup 和 teardown 是拿不到返回值的,使用 fixture 是可以的

2、steup 和 teardown 无法指定在某个case上运行, fixture 是可以的

3、setup 和 teardown 多文件使用,每个文件都需要写,fixture 可以只写一次

4、fixture 就是一个普通的函数, 使用@pytest.fixture装饰之后,就变成了一个fixture,使用 yield 关键字,来决定前置条件还是后置条件

1、普通的setup和teardown
import pytest


class TestUser:

    @classmethod
    def setup_class(cls):
        print('setup_class')

    @classmethod
    def teardown_class(cls):
        print('teardown_class')

    def setup_method(self):
        print('setup_method')

    def teardown_method(self):
        print('teardown_method')

    def test_user(self):
        print('testuser')


if __name__ == '__main__':
    pytest.main([__file__, '-s'])

运行结果是:

test.py setup_class
setup_method
testuser
.teardown_method
teardown_class
2、fixture -普通的
import pytest


@pytest.fixture
def fixture1():
    print('这是fixture1')

def test_user1(fixture1):
    print('test_user1')
    
if __name__ == '__main__':
    pytest.main([__file__, '-s'])

方法被 @pytest.fixture 装饰了之后,就可以被使用的函数调用

运行顺序是:

1-pytest 找到了 test_开头的函数 test_user1

2-test_user1 这个测试函数,需要一个参数fixture1,于是fixture1函数就被找到

3-fixture1被调用来创建一个实例

运行的结果是:

test2.py 这是fixture1
test_user1
.
3、fixture-有返回值,单个返回值和多个返回值
import pytest


@pytest.fixture
def fixture2():
    print('这是fixture2')
    return 1

def test_user2(fixture2):
    ret = fixture2
    print(ret)
    print('test_user1')

@pytest.fixture
def fixture3():
    print('这是fixture3')
    return 2, 3

def test_user3(fixture3):
    ret1 = fixture3[0]
    ret2 = fixture3[1]
    print(ret1)
    print(ret2)
    print('test_user3')

if __name__ == '__main__':
    pytest.main([__file__, '-s'])

执行结果

test2.py 这是fixture2
1
test_user1
.这是fixture3
2
3
test_user3
.
4、fixture-加关键字autouse=True
import pytest

@pytest.fixture(autouse=True)
def fixture1():
    print('这是fixture1')

def test_user1():
    print('test_user1')

class TestUser1:
    def test_user2(self):
        print('test_user2')

    def test_user3(self):
        print('test_user3')

if __name__ == '__main__':
    pytest.main([__file__, '-s'])

autouse这个参数的作用是自动使用fixture,自动使用的话,就不需要传入fixture了,case在运行之前他会自动运行fixture

使用atuouse的话,返回值就获取不到了,需要用返回值的话 ,还是需要传入fixture

执行结果:

test.py 这是fixture1
test_user1
.这是fixture1
test_user2
.这是fixture1
test_user3
.
5、fixture-加关键字 scopr=" class/functiom/module/session "
import pytest

@pytest.fixture(scope='function', autouse=True)
def fixture4():
    print('这是fixture4')

@pytest.fixture(scope='class', autouse=True)
def fixture5():
    print('这是fixture5')

def test_user4():
    print('test_user4')

class TestUser5:
    def test_user5(self):
        print('test_user5')
    def test_user6(self):
        print('test_user6')

if __name__ == '__main__':
    pytest.main([__file__, '-s'])

当出现多个范围装饰的时候,优先实例化范围优先级高的。
也就是优先级从大到小:session–>module–->class–->function

运行结果:

test2.py 这是fixture5
这是fixture4
test_user4
.这是fixture5
这是fixture4
test_user5
.这是fixture4
test_user6
.
6、fixture实现后置,只需要用yield关键字
import pytest

@pytest.fixture(autouse=True)
def fixture1():
    print('这是fixture1的前置')
    yield
    print('这是fixture1的后置,在yield之后')

def test_user1():
    print('test_user1')

class TestUser1:

    def test_user2(self):
        print('test_user2')
    def test_user3(self):
        print('test_user3')

if __name__ == '__main__':
    pytest.main([__file__, '-s'])

执行结果:

test.py 这是fixture1的前置
test_user1
.这是fixture1的后置,在yield之后
这是fixture1的前置
test_user2
.这是fixture1的后置,在yield之后
这是fixture1的前置
test_user3
.这是fixture1的后置,在yield之后
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/468306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号