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

2022-03-18 14:23 更新

有時(shí)測(cè)試函數(shù)不需要直接訪問(wèn)??fixture??對(duì)象。例如,測(cè)試可能需要使用空目錄作為當(dāng)前工作目錄進(jìn)行操作,但不關(guān)心具體目錄。下面介紹如何使用標(biāo)準(zhǔn)的??tempfile??和pytest ??fixture??來(lái)實(shí)現(xiàn)它。我們將??fixture??的創(chuàng)建分離到一個(gè)??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)

并通過(guò)??usefixtures??標(biāo)記在測(cè)試模塊中聲明它的使用:

# 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()) == []

對(duì)于??usefixture??標(biāo)記,在執(zhí)行每個(gè)測(cè)試方法時(shí)需要??cleandir fixture??,就像為每個(gè)測(cè)試方法指定了一個(gè)??cleandir??函數(shù)參數(shù)一樣。讓我們運(yùn)行它來(lái)驗(yàn)證我們的??fixture??被激活,并且測(cè)試通過(guò):

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

你可以像這樣指定多個(gè)??fixture??:

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

你可以在測(cè)試模塊級(jí)別使用??pytestmark??來(lái)指定??fixture??的使用:

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

也可以將項(xiàng)目中所有測(cè)試所需的??fixture??放入一個(gè)?ini?文件中:

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)