我有一个参数化的pytest测试方法,test_1
。在为此测试方法运行所有参数化案例之前,我想调用另一个方法tmp_db_uri
,该方法创建一个临时数据库并为数据库生成uri。我只想调用一次该生成器,以便我可以为所有测试用例使用相同的临时数据库。我认为如果我从一个灯具(db_uri
)调用它,那就可以了,因为我认为每次测试都会创建一次灯具,但似乎在此测试中每个案例都会调用灯具,每次都会创建一个新的临时数据库。
这样做的正确方法是什么?有没有办法在运行所有案例之前运行此方法的设置,只使用一个tmp_db_uri
?我不希望临时数据库闲置在整个测试模块上 - 只是在这一次测试的持续时间内(清理由tmp_db_uri
上的上下文管理器处理)。
我目前看起来有类似的东西:
@pytest.fixture
def db_uri(tmp_db_uri):
return tmp_db_uri
@pytest.mark.parameterize(("item1","item2"), ((1, "a"), (2, "b")))
def test_1(item1, item2, db_uri):
print("do something")
答案 0 :(得分:1)
您可以创建一个模块级夹具,这样它只为整个测试模块创建一次,或者您可以创建一个全局变量并返回db(如果已经创建或以其他方式创建)。
@pytest.fixture(scope="module")
def db_uri(tmp_db_uri):
return tmp_db_uri
或
TMP_DB = None
@pytest.fixture
def db_uri(tmp_db_uri):
global TMP_DB
if not TMP_DB:
# do your stuff to create tmp_db
TMP_DB = tmp_db_uri
return TMP_DB