今天要介紹 pytest 最重要的功能 fixture。在介紹 fixture 之前要先講到 setup 與 teardown。
簡單來講它們是負責在測試開始前與開始後的初始化, setup 負責開始前, teardown 負責結束後。舉例來講,回到前面的 ithelp, setup 可以負責登入這類每次進網頁要做的設定,而 teardown 則是負責把每次自動化發出去的草稿刪除。透過 setup/teardown 能夠省下多餘的 code。
而 fixture 是一種更加靈活的方式,它與 setup / teardown 比起來有幾個好處:
使用的方式也很簡單,在函數上一行加上@pytest.fixture()
即可。括號內可填入範圍 scope 或自動調用 autouse 等等。
可以透過 yield 在 pytest 實現 setup / teardown 的作法,假設我們要做瀏覽器的初始化:
@pytest.fixture()
def browser():
print('open browser')
yield
print('close browser')
我們可以透過 yield 區隔開 setup 與 teardown,測試結束前執行上面的code,測試結束後執行下面的code。
透過上面講的,我們可以並列使用多個 fixture,假設現在測試要打開首頁並且登入:
@pytest.fixture()
def open_homepage():
@pytest.fixture()
def login():
def test_login(open_homepage, login):
把兩個 fixture 放在同一個 test 中就可以並列使用。