1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > pytest 前置后置用法之 Fixture setup teardown

pytest 前置后置用法之 Fixture setup teardown

时间:2023-03-27 11:45:30

相关推荐

pytest 前置后置用法之 Fixture setup teardown

文章目录

前言使用 setup 和 teardown 实现方法介绍方法级别类级别模块级别整体案例执行结果使用 Fixture 实现方法介绍使用 Fixture 完成前置方法所有用例执行部分用例执行使用 Fixture 完成后置方法后记

前言

pytest 中可以使用 setup 和 teardown 来实现前置和后置方法,同时也可以使用装饰器 Fixture 来实现。主要用来做数据准备或者数据清理使用。

使用 setup 和 teardown 实现

方法介绍

在 pytest 中使用 setup 和 teardown 可以实现三种级别的前置和后置,分别是 方法级别、类级别和模块级别。不过模块级别用的不多。

方法级别

每个测试方法执行前后都会执行的方法。方法前置在每个用例执行之前会先运行, 方法后置在每个用例执行结束后运行。

class TestDemo:def setup(self): # 方法前置passdef teardown(self): # 方法后置pass

类级别

测试类中所有测试方法执行前后都会执行的方法。方法前置在所有用例执行之前会先运行, 方法后置在所有用例执行结束后运行。

class TestDemo:def setup_class(self): # 类前置passdef teardown_class(self): # 类后置pass

模块级别

模块级别可以用在 不使用类定义的用例中。

如果不再类定义的用例中书写,模块级别的方法,会在所有用例执行之前调用 前置方法, 在所有用例执行结束后调用后置方法。

在使用类定义的用例中,需要将方法写在类的外部,不能在类中书写。

习惯性的代码书写是在一个模块中定义一个测试类,所以模块级别的基本不用, 如果书写了, 前置方法会在类级别前置之前执行, 后置方法会在类后置之后执行。

如果书写多个测试类,前置方法会在所有测试类之前执行,后置方法会在所有测试类执行结束后执行。

def setup_module(): # 模块前置passdef teardown_module(): # 模块后置pass

整体案例

import pytestdef setup_module():print('1. 模块级别前置 setup_module')def teardown_module():print('1. 模块级别后置 teardown_module')class TestDemo:def setup_class(self): # 类前置print('2. 类前置 setup_class')def teardown_class(self): # 类后置print("2. 类后置 teardown_class")passdef setup(self): # 前置print("3. 方法前置 setup")def teardown(self): # 后置print("3. 方法后置 teardown")def test_func1(self):print('4. 测试方法 1')def test_func2(self):print('4. 测试方法 2')

执行结果

使用 Fixture 实现

以上的功能都可以使用 Fixture 实现,并且 Fixture 实现更加的灵活。

setup 和 teardown 是针对所有的方法,Fixture 可以针对其中的某几个用例。

方法介绍

Fixture 的实现是依靠装饰器来完成的,可以通过查看代码,发现 Fixture 的常用参数为五个。

def fixture(scope="function", params=None, autouse=False, ids=None, name=None)

参数说明:

scope: 表示装饰器函数的作用域,相当于是方法的级别。可以传递的参数有:"function","class","module","package"or"session"function: 默认级别,即 方法级别,在测试方法执行前执行,class:类级别, 在测试类中所有方法执行之前执行module: 模块级别 params: 一个可选的参数列表,用于做Fixture的参数化。可将数据提供给其他的Fixture,或者所有测试使用它 。autouse :bool 值,TrueFalse值为 True, 自动调用 Fixture的方法 ids:一个字符串id的列表,即当使用params参数化时,给每一个值设置一个变量名。如果没有提供ID,params将自动生成ID 。name : 用于给方法起别名, 调用的时候使用别名调用。

使用 Fixture 完成前置方法

所有用例执行

设定 autouse 为 True,所有的用例自动执行

import pytest# 1. 定义类前置方法, 设定 autouse 为 True,自动为所有的用例自动执行@pytest.fixture(scope='class', autouse=True)def func1():print('1. 类前置')# 2. 定义 方法前置方法@pytest.fixture(scope='function', autouse=True)def func2():print('2. 方法前置')class TestDemo:def test_func1(self):print('3. 测试方法 1')def test_func2(self):print('3. 测试方法 2')

结果

部分用例执行

import pytest# 1. 定义类前置方法, 设定 autouse 为 True,自动为所有的用例自动执行@pytest.fixture(scope='class', autouse=True)def func1():print('1. 类前置')# 2. 定义 方法前置方法@pytest.fixture(scope='function')def func2():print('2. 方法前置')class TestDemo:def test_func1(self):print('3. 测试方法 1')def test_func2(self, func2):print('3. 测试方法 2')

使用 Fixture 完成后置方法

使用 Fixture 完成后置方法需要使用yield关键字, 在 yield 上方书写前置方法代码, yield 下方书后置方法代码。

@pytest.fixture()def func():# 书写前置方法代码yield# 书写后置方法代码

代码实现

import pytest# 1. 定义类前置方法, 设定 autouse 为 True,自动为所有的用例自动执行@pytest.fixture(scope='class', autouse=True)def func1():print('1. 类前置')yieldprint('1. 类后置')# 2. 定义 方法前置方法@pytest.fixture(scope='function', autouse=True)def func2():print('2. 方法前置')yieldprint('2. 方法后置')class TestDemo:def test_func1(self):print('3. 测试方法 1')def test_func2(self):print('3. 测试方法 2')

结果

后记

这里简单的介绍下 Fixture 的使用,更多的用法,会后续不断补充。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。