pytest参数化方法设置

时间:2016-02-04 21:05:07

标签: pytest parameterized

我有一个参数化的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")

1 个答案:

答案 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