2016-02-04 61 views
0

我有一個參數化pytest測試方法,test_1。在爲此測試方法運行所有參數化案例之前,我想調用另一種方法tmp_db_uri,它創建一個臨時數據庫並生成數據庫的uri。我只想調用一次該生成器,以便我可以對所有測試用例使用相同的臨時數據庫。我認爲如果我從夾具中調用它(db_uri),那就可以做到這一點,因爲我認爲每個測試都會創建一次燈具,但是在這個測試中似乎夾具正在爲每個案例調用,並且一個新的每次都創建臨時數據庫。pytest參數化方法設置

這樣做的正確方法是什麼?有沒有辦法在所有案例運行之前運行此方法的設置,只使用一個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

您可以創建一個模塊級固定,因此,它的創建一次,在整個測試模塊,也可以創建一個全局變量,並返回數據庫,如果它已被創建或創建,否則。

@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 
+0

使用模塊級的燈具選擇最適合我的情況。謝謝! – LateCoder