2017-08-17 191 views
4

我正在經歷pytest夾具,下面看起來非常相似,最新的作品很相似。夾具和yield_fixture在pytest中的區別

是的,可讀性在yield_fixure更好,但是有人可以讓我知道究竟是什麼區別。

我應該在下面提到的情況下使用它?

@pytest.fixture() 
def open_browser(request): 
    print("Browser opened") 

    def close_browser(): 
     print("browser closed") 

    request.addfinalizer(close_browser) 

    return "browser object" 

@pytest.yield_fixture() 
def open_browser(): 
    print("Browser opened") 
    yield "browser object" 
    print("browser closed") 


def test_google_search(open_browser): 
    print(open_browser) 
    print("test_google_search") 
+0

'yield'夾具使得在夾具中使用上下文管理器自然 –

回答

6

唯一的區別在於可讀性。我認爲(雖然我不是100%肯定)底層行爲是相同的(即yield語句作爲終結器運行後的清理)。我總是更喜歡使用yield fixture來進行清理,因爲它更具可讀性。

如果您使用的是pytest < 3.0,則仍然需要使用pytest.yield_fixture才能獲得該行爲。但是,如果您能夠使用pytest 3.0+,則不推薦使用pytest.yield_fixture,並且可以使用pytest.fixture來獲得相同的yield_fixture行爲。

這裏有the explanatory docs

由於pytest-3.0,使用普通燈具裝飾燈具可以使用 yield語句,以提供固定值和執行拆卸代碼, 酷似以前的版本yield_fixture。

作爲yield_fixture的標記函數仍受支持,但不推薦使用 ,不應在新代碼中使用。