pytest官方文檔解讀fixtures的autouse

現在我們已經知道瞭,fixtures是一個非常強大的功能。

那麼有的時候,我們可能會寫一個fixture,而這個fixture所有的測試函數都會用到它。

那這個時候,就可以用autouse自動讓所有的測試函數都請求它,不需要在每個測試函數裡顯示的請求一遍。

具體用法就是,將autouse=True傳遞給fixture的裝飾器即可。

import pytest
@pytest.fixture
def first_entry():
    return "a"
@pytest.fixture
def order(first_entry):
    return []
@pytest.fixture(autouse=True)
def append_first(order, first_entry):
    return order.append(first_entry)
def test_string_only(order, first_entry):
    assert order == [first_entry]
def test_string_and_int(order, first_entry):
    order.append(2)
    assert order == [first_entry, 2]

先來看第一個測試函數test_string_only(order, first_entry)的執行情況:

  • 雖然在測試函數裡請求瞭2個fixture函數,但是order拿到的並不是[],first_entry拿到的也並不是"a"。
  • 因為存在瞭一個autouse=True的fixture函數,所以append_first先會被調用執行。
  • 在執行append_first過程中,又分別請求瞭order、 first_entry這2和fixture函數。
  • 接著,append_first對分別拿到的[]和"a"進行append處理,最終返回瞭["a"]。所以,斷言assert order == [first_entry]是成功的。

同理,第二個測試函數test_string_and_int(order, first_entry)的執行過程亦是如此。

以上就是pytest官方文檔解讀fixtures的autouse的詳細內容,更多關於pytest解讀fixtures的autouse的資料請關註WalkonNet其它相關文章!

推薦閱讀: