pytest fixture-在帶有usefixture的類和模塊中使用fixture

2022-03-18 14:23 更新

有時測試函數不需要直接訪問??fixture??對象。例如,測試可能需要使用空目錄作為當前工作目錄進行操作,但不關心具體目錄。下面介紹如何使用標準的??tempfile??和pytest ??fixture??來實現它。我們將??fixture??的創(chuàng)建分離到一個??conftest.py??文件中:

# content of conftest.py

import os
import tempfile

import pytest


@pytest.fixture
def cleandir():
    with tempfile.TemporaryDirectory() as newpath:
        old_cwd = os.getcwd()
        os.chdir(newpath)
        yield
        os.chdir(old_cwd)

并通過??usefixtures??標記在測試模塊中聲明它的使用:

# content of test_setenv.py
import os
import pytest


@pytest.mark.usefixtures("cleandir")
class TestDirectoryInit:
    def test_cwd_starts_empty(self):
        assert os.listdir(os.getcwd()) == []
        with open("myfile", "w") as f:
            f.write("hello")

    def test_cwd_again_starts_empty(self):
        assert os.listdir(os.getcwd()) == []

對于??usefixture??標記,在執(zhí)行每個測試方法時需要??cleandir fixture??,就像為每個測試方法指定了一個??cleandir??函數參數一樣。讓我們運行它來驗證我們的??fixture??被激活,并且測試通過:

$ pytest -q
..                                                                   [100%]
2 passed in 0.12s

你可以像這樣指定多個??fixture??:

@pytest.mark.usefixtures("cleandir", "anotherfixture")
def test():
    ...

你可以在測試模塊級別使用??pytestmark??來指定??fixture??的使用:

pytestmark = pytest.mark.usefixtures("cleandir")

也可以將項目中所有測試所需的??fixture??放入一個?ini?文件中:

# content of pytest.ini
[pytest]
usefixtures = cleandir


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號