<< 返回目录
1 pytest自动化测试 - 构造“预置条件”的几种方式
1.1 使用夹具
构造预置条件
在夹具章节中,我们介绍了夹具的作用,其中一项就是构造预置条件。@pytest.fixture
装饰器中如果测试数据使用yield
返回,则yield
前的语句为预置条件语句。
import pytest@pytest.fixture
def setup_resource():# 准备资源resource = "This is a test resource"print("\n" + "="*65)print("BEGIN: 用例预置条件.")yield resource# 清理资源print("END: 用例后置条件.")def test_with_fixture(setup_resource):print("第一个用例开始".center(70))assert "test resource" in setup_resourceprint("第一个用例结束".center(70))def test_another_with_fixture(setup_resource):print("第二个用例开始".center(70))assert len(setup_resource) > 10print("第二个用例结束".center(70))
夹具默认情况下是用例范围生效,即夹具中的预置条件在每个用例都会执行。
1.2 在测试类中使用setup
方法构造预置条件
类中的setup
函数用于构造预置条件,它在类的每个测试用例执行前都会执行一次。
import pytestclass TestExample:def setup_method(self):print("\n" + "=" * 65)print("预置条件")self.data = [4, 5, 6]def test_sum_in_class_001(self):print("第1个测试用例开始")assert sum(self.data) == 15print("第1个测试用例结束")def test_sum_in_class_002(self):print("第2个测试用例开始")assert 6 in self.dataprint("第2个测试用例结束")
输出:
============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_setup_001.py
=================================================================
预置条件
第1个测试用例开始
第1个测试用例结束
.
=================================================================
预置条件
第2个测试用例开始
第2个测试用例结束
.============================== 2 passed in 0.02s ==============================
1.3 在模块中使用setup
方法构造预置条件
前一节介绍了如果在类中使用setup
方法构造预置条件,现在介绍模块中的setup
方法,与类中的setup
方法不同的是模块中的setup
函数名有讲究,如下所示:
- 每个用例都执行的预置条件:函数名固定使用
def setup_function()
import pytestdata = [4, 5, 6]def setup_function():print("\n" + "=" * 65)print("预置条件")def test_sum_in_module_001():print("第1个测试用例开始")assert sum(data) == 15print("第1个测试用例结束")def test_sum_in_module_002():print("第2个测试用例开始")assert 6 in dataprint("第2个测试用例结束")
输出:
============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_setup_002.py
=================================================================
预置条件
第1个测试用例开始
第1个测试用例结束
.
=================================================================
预置条件
第2个测试用例开始
第2个测试用例结束
.============================== 2 passed in 0.01s ==============================
从报文可以看到,每个用例执行前都执行了预置条件。
- 模块级的预置条件:即,本模块中的第一个测试用例执行前执行一次,函数名固定使用``
import pytestdata = [4, 5, 6]def setup_module():print("\n" + "=" * 65)print("预置条件")def test_sum_in_module_001():print("第1个测试用例开始")assert sum(data) == 15print("第1个测试用例结束\n")def test_sum_in_module_002():print("第2个测试用例开始")assert 6 in dataprint("第2个测试用例结束")
输出:
============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_setup_002.py
=================================================================
预置条件
第1个测试用例开始
第1个测试用例结束.第2个测试用例开始
第2个测试用例结束
.============================== 2 passed in 0.01s ==============================
从报文中可以看到,预置条件只执行了一次,第2个用例执行时便没有执行。
🕮忠告:虽然pytest提供了函数范围、类范围、模块范围等的预置条件构造方法,但从作者多年的测试工作经验来看,每个测试用例单独构造预置条件和后置条件是一种更合理的安排方式!否则极易出现用例执行依赖,极大增加测试用例的排错工作量!
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来源自豆包AI,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.
<< 返回目录