pytest中fixture的scope

pytest中fixture的scope

在pytest中,fixture是一种用于提供测试环境的机制。它可以在每个测试用例之前或之后执行一些特定的代码,从而为测试用例提供必要的准备工作或清理工作。而fixture的scope则是用来指定fixture的作用范围的。在本文中,我们将详细讨论pytest中fixture的scope的各种选项。

1. function

function是pytest中fixture的默认scope。当我们没有明确指定scope时,fixture的作用范围被视为function级别。这意味着fixture的代码将在每个测试用例函数运行前后执行。

下面是一个使用function scope的例子:

import pytest

@pytest.fixture(scope="function")

def setup():

# 在每个测试用例函数运行前执行的代码

print("Setting up...")

yield

# 在每个测试用例函数运行后执行的代码

print("Tearing down...")

def test_case1():

print("Running test_case1")

def test_case2():

print("Running test_case2")

当我们运行上述代码时,可以看到输出结果如下:

Setting up...

Running test_case1

.Tearing down...

Setting up...

Running test_case2

.Tearing down...

代码中的setup fixture定义了在每个测试用例函数运行前后执行的代码,它使用了function scope。可以看到在每个测试用例函数之前都输出了"Setting up...",之后又输出了"Tearing down..."。

2. class

class scope是指定fixture作用范围为测试类的级别。这意味着fixture的代码将在该测试类的所有测试用例函数之前后执行一次。

下面是一个使用class scope的例子:

import pytest

@pytest.fixture(scope="class")

def setup():

# 在测试类中所有测试用例函数运行前执行的代码

print("Setting up...")

yield

# 在测试类中所有测试用例函数运行后执行的代码

print("Tearing down...")

class TestClass:

def test_case1(self):

print("Running test_case1")

def test_case2(self):

print("Running test_case2")

当我们运行上述代码时,可以看到输出结果如下:

Setting up...

Running test_case1

Running test_case2

.Tearing down...

可以看到,在TestClass类中的所有测试用例函数之前都输出了"Setting up...",在所有测试用例函数之后输出了"Tearing down..."。

3. module

module scope是指定fixture作用范围为测试模块的级别。这意味着fixture的代码将在该测试模块中的所有测试用例函数之前后执行一次。

下面是一个使用module scope的例子:

import pytest

@pytest.fixture(scope="module")

def setup():

# 在测试模块中所有测试用例函数运行前执行的代码

print("Setting up...")

yield

# 在测试模块中所有测试用例函数运行后执行的代码

print("Tearing down...")

def test_case1():

print("Running test_case1")

def test_case2():

print("Running test_case2")

当我们运行上述代码时,可以看到输出结果如下:

Setting up...

Running test_case1

Running test_case2

.Tearing down...

可以看到,在整个测试模块中的所有测试用例函数之前都输出了"Setting up...",在所有测试用例函数之后输出了"Tearing down..."。

4. session

session scope是指定fixture作用范围为测试会话的级别。这意味着fixture的代码将在整个测试会话的开始和结束时执行一次。

下面是一个使用session scope的例子:

import pytest

@pytest.fixture(scope="session")

def setup():

# 在测试会话开始时执行的代码

print("Setting up...")

yield

# 在测试会话结束时执行的代码

print("Tearing down...")

def test_case1():

print("Running test_case1")

def test_case2():

print("Running test_case2")

当我们运行上述代码时,可以看到输出结果如下:

Setting up...

Running test_case1

Running test_case2

.Tearing down...

可以看到,在整个测试会话的开始时输出了"Setting up...",在测试会话结束时输出了"Tearing down..."。

总结

在pytest中,我们可以使用fixture来创建测试环境。fixture的scope选项可以指定fixture的作用范围,包括function、class、module和session。根据不同的作用范围,fixture的代码将在不同的时机执行。合理选择fixture的作用范围可以提高测试用例的效率和可维护性。

后端开发标签