我有需要测试数据的单元测试。此测试数据是下载的,文件大小相当大。
@pytest.fixture
def large_data_file():
large_data = download_some_data('some_token')
return large_data
# Perform tests with input data
def test_foo(large_data_file): pass
def test_bar(large_data_file): pass
def test_baz(large_data_file): pass
# ... and so on
我不想多次下载此数据。它应该只下载一次,并传递给所有需要它的测试。pytest是只调用一次large_data_file
,然后将其用于使用该fixture的每个单元测试,还是每次都调用large_data_file
?
在unittest
中,只需在setUpClass
方法中下载一次所有测试的数据。
我不希望在py脚本中只有一个全局large_data_file = download_some_data('some_token')
。我想知道如何用Pytest处理这个用例。
2条答案
按热度按时间epggiuax1#
pytest是只调用一次
large_data_file
,然后将其用于使用该fixture的每个单元测试,还是每次都调用large_data_file
?这取决于夹具范围。默认范围是
function
,因此在示例中large_data_file
将被计算三次。如果你扩大范围,例如。每个测试会话将评估一次夹具,并且结果将被缓存并在所有相关测试中重复使用。查看范围部分:在
pytest
文档中跨类、模块、包或会话共享fixture以了解更多细节。2w3rbyxf2#
为了详细说明@hoefling的答案,这里有一个实际的例子: