Python Pytest夹具示例
fixture 是用于为测试提供预设环境或数据的函数,1. 使用 @pytest.fixture 装饰器定义 fixture;2. 在测试函数中以参数形式注入 fixture;3. yield 之前执行 setup,之后执行 teardown;4. 通过 scope 参数控制作用域,如 function、module 等;5. 将共用 fixture 放在 conftest.py 中实现跨文件共享,从而提升测试的可维护性和复用性。
在使用 pytest
进行测试时,fixture
是一个非常强大的功能,用于为测试函数提供预设的测试环境或数据。下面是一个简单但完整的 pytest fixture
示例,帮助你理解如何定义和使用 fixture。

✅ 基本 fixture 示例:数据库连接模拟
假设我们要测试一个操作“用户数据”的模块,需要一个数据库连接对象。
# test_user.py import pytest # 模拟数据库 class Database: def __init__(self): self.users = {} def add_user(self, user_id, name): self.users[user_id] = name def get_user(self, user_id): return self.users.get(user_id) def clear(self): self.users.clear() # 定义 fixture:提供一个干净的数据库实例 @pytest.fixture def db(): print("\n[Setup] 创建数据库实例") # 可以看到执行顺序 database = Database() yield database # 返回给测试函数使用 print("[Teardown] 清理数据库") database.clear() # 测试用例使用 fixture def test_add_user(db): db.add_user(1, "Alice") assert db.get_user(1) == "Alice" def test_get_user_not_exists(db): assert db.get_user(99) is None def test_add_multiple_users(db): db.add_user(1, "Alice") db.add_user(2, "Bob") assert len(db.users) == 2 assert db.get_user(2) == "Bob"
? 运行测试
确保你已经安装 pytest:

pip install pytest
运行测试:
pytest test_user.py -v
输出类似:

test_user.py::test_add_user[Setup] 创建数据库实例 PASSED[Teardown] 清理数据库 test_user.py::test_get_user_not_exists[Setup] 创建数据库实例 PASSED[Teardown] 清理数据库 test_user.py::test_add_multiple_users[Setup] 创建数据库实例 PASSED[Teardown] 清理数据库
每个测试函数都会获得一个独立的 db
实例,因为 fixture 函数在每次测试前重新执行。
? fixture 作用域(scope)
你可以控制 fixture 的复用范围,比如让多个测试共享同一个实例:
@pytest.fixture(scope="module") def db(): print("\n[Module Setup] 创建数据库一次") database = Database() yield database print("[Module Teardown] 清理数据库一次") database.clear()
scope="function"
:默认,每个测试函数调用一次(最常见)scope="class"
:每个测试类调用一次scope="module"
:每个.py
文件调用一次scope="session"
:整个测试会话只执行一次
? conftest.py:共享 fixture
如果你有多个测试文件需要使用同一个 fixture,可以把它放在 conftest.py
中:
# conftest.py import pytest @pytest.fixture def db(): database = Database() yield database database.clear()
这样,所有同目录或子目录下的测试文件都可以直接使用 db
,无需导入。
✅ 总结关键点
-
@pytest.fixture
装饰器定义可重用的测试资源 -
yield
之前是 setup,之后是 teardown -
fixture
函数名作为参数传入测试函数,自动注入 - 使用
conftest.py
实现跨文件共享 fixture - 可通过
scope
控制生命周期,提升性能
基本上就这些。fixture 让测试更干净、可复用、易维护。
以上是Python Pytest夹具示例的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT
人工智能驱动投资研究,做出更明智的决策

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Optional是Java8引入的容器类,用于明确表示一个值可能为空,从而避免NullPointerException;2.它通过提供map、orElse等方法简化嵌套null检查、防止方法返回null以及规范集合返回值;3.最佳实践包括仅用于返回值、避免字段或参数使用、区分orElse与orElseGet、不直接调用get();4.不应滥用Optional,如非空方法无需包装,流中应避免不必要的Optional操作;正确使用Optional能显着提升代码安全性与可读性,但需配合良好的编程习惯。

Chrome书签编辑简单且实用,用户可通过快捷键Ctrl Shift O(Windows)或Cmd Shift O(Mac)进入书签管理器,也可通过浏览器菜单进入;1.编辑单个书签时,右键点击选择“编辑”,修改标题或网址后点击“完成”保存;2.批量整理书签时,可在书签管理器中按住Ctrl(或Cmd)多选书签,右键选择“移至”或“复制到”目标文件夹;3.导出和导入书签时,点击“整理”按钮选择“导出书签”保存为HTML文件,需要时再通过“导入书签”功能恢复。

首先,checkforphysicalissueslikedebrisordamageandcleanthekeyboardestestesternone; 2.TestTheEnterKeyIndifferentAppStoDeTermineIftheissueSueIssoftware; 3.RestyourComputerComputerComputerComputerComputorToreSolvetEmporaryGlitches; 4.disablestickykeys; 4.disablestickykeys,calter filtergleglekeys,ortogglek

AmemoryleakinJavaoccurswhenunreachableobjectsarenotgarbagecollectedduetolingeringreferences,leadingtoexcessivememoryusageandpotentialOutOfMemoryError.Commoncausesincludestaticcollectionsretainingobjectsindefinitely,unclosedresourceslikestreamsorconne

Wrapperclassesareusedtoconvertprimitivedatatypesintoobjects,enablingtheiruseincollections,allowingnullvalues,providingutilitymethods,andsupportingautoboxing/unboxing.1.TheyallowprimitivestobeusedincollectionslikeArrayList,whichonlyacceptobjects.2.The

使用max()和min()方法结合Comparator可找到流中的最大值和最小值,例如通过Comparator.naturalOrder()或Integer::compareTo比较基本类型;2.对于自定义对象,使用Comparator.comparing()基于特定字段比较,如Person::getAge;3.由于结果是Optional,必须处理空流情况,可使用isPresent()检查或orElse()提供默认值,推荐对基本类型使用IntStream等以避免装箱开销并提升性能,最终应始终妥善

0x00前言Kerberos由麻省理工学院创建,作为解决这些网络安全问题的解决方案。是一种通过网络提供安全验证处理的客户机/服务器体系结构。通过验证,可保证网络事务的发送者和接收者的身份真实。该服务还可以检验来回传递的数据的有效性(完整性),并在传输过程中对数据进行加密(保密性)。0x01漏洞描述拥有受害网络访问权限的攻击者可以通过建立中间(MITM)攻击或其他本地网络欺骗技术来利用此漏洞,然后向客户端受害者电脑发送恶意Kerberos消息,并假冒是Kerberos身份验证服务器。0x02CVE

使用DecimalFormat可以精确控制数字格式。1.使用模式字符串如"#,###.##"进行基本格式化,其中#表示可选数字,0表示必显数字,,为千位分隔符,.为小数点;2.常见模式包括"0.00"保留两位小数、"0,000.000"补零对齐等;3.避免科学计数法可通过设置setScientificNotation(false)或使用足够位数的模式;4.可通过setRoundingMode()设置舍入模式,如HALF_UP、DOWN等
