【发布时间】:2022-01-11 16:49:38
【问题描述】:
我有一个夹具可以查询 MongoDB 数据库并返回一条记录。
@pytest.fixture
def chicago():
return GetRecord("CHICAGO,IL")
每次我将此夹具传递给测试时,它都会再次运行查询。有没有关于如何制作它的最佳实践,所以我只运行这个数据库调用一次?我发现我可以做这样的事情,但这似乎违背了固定装置的目的。
chi = GetRecord("CHICAGO,IL")
@pytest.fixture
def chicago():
return chi
如果这是替代方案,我可以直接传入chi 而不是声明一个夹具。还有其他解决方案吗?
【问题讨论】:
-
您可以使用会话范围的固定装置 (
@pytest.fixture(scope="session"))。 -
@MrBeanBremen 这似乎有点工作,但也似乎比在夹具块之外声明变量要慢。设置会话范围是否需要更多开销?
-
你确定吗?与数据库查询相比,这里的任何开销都无关紧要——我不知道有任何开销。你量过时间吗?哦,当然有区别:在第一种情况下(全局变量),查询是在加载测试时进行的,在第二种情况下(会话范围的夹具)是在调用第一个测试时进行的,因此可能会改变测量的时间,具体取决于关于你如何衡量它。
-
我的笔记本电脑可能是后台工作或其他原因,我只是又试了几次,现在看到了预期的性能。如果您想提交您的解决方案作为答案,以便我接受,那就太好了。我无法在 Google 搜索中找到范围设置,因此随着时间的推移,这可能会获得一些关注。
标签: python unit-testing pytest