1. 程式人生 > 實用技巧 >內建fixture---tmpdir和tmpdir_factory

內建fixture---tmpdir和tmpdir_factory

tmpdir和tmpdir_factory

內建的tmpdirtmpdir_factory負責在測試開始執行前建立臨時檔案或目錄,並在測試結束後刪除。單個測試使用tmpdir,多個測試使用tmpdir_factory
tmpdir的作用範圍是函式級別,tmpdir_factory的是會話級別 ,如果需要其他級別的,需要建立一個新的fixture。

def test_tmpdir(tmpdir):
    a_file=tmpdir.join("a.txt")
    b_dir=tmpdir.mkdir("something")
    b_file=b_dir.join("b.txt") 
    a_file.write("aaa")
    b_file.write("bbb")
    assert a_file.read()=="aaa"  and b_file.read()=="bbb"

pytestconfig

內建的pytestconfig可以通過命令列引數,選項,配置檔案,外掛,執行目錄等方式來控制pytest。它是request.config的快捷方式,被稱為“pytest配置物件”

def pytest_addoption(parser):  #pytest的hook函式pytest_addoption,可新增命令列選項
    parser.addoption("--myopt",action="store_true",help="some my option")
    parser.addoption("--foo",action="store",default="bar",help="foo:bar or baz")

def test_option(pytestconfig):
    print(pytestconfig.gettoption('myopt'))
    print(pytestconfig.gettoption('foo'))
    print(pytestconfig.option.foo)
# 一些例子
def test_pytestconfig(pytestconfig):
    print(pytestconfig.args)
    print(pytestconfig.inifile)
    print(pytestconfig.invocation_dir)
    print(pytestconfig.rootdir)
    print(pytestconfig.getoption('showlocals'))

使用cache

cache用於測試會話傳遞給下一段會話
--last-failed(僅執行上次未通過的)和--failed-first (之前未通過的首先執行)很好的展示cache的功能,看看cache是如何儲存這些標識資料的。
--cache-show可以顯示cache儲存的資訊
--clear-cache 執行前清空cache快取

def test_cache(cache):
    cache.get(key,default)
    cache.set(key,value)

使用capsys

允許使用程式碼讀取stdout和stderr,capsys.redouterr() 也可以臨時禁止抓取日誌輸出capsys.redouterr()


pytest通常會抓取輸出,僅當全部用例結束後,抓取到的日誌才會顯示出來。--s引數可以關閉這個功能,在測試執行期就把輸出直接傳送到stdout,但有時可能只需要部分資訊,則可以用 capsys.disabled()臨時讓輸出繞過預設的輸出捕獲機制
capsys.redouterr()

def test_disabled(capsys):
    with.capsys.disabled():
        print("aaaa")
    print("bbb")  # pytest -q 和 pytest -q -s的區別

monkeypatch

在執行期間對類或模組進行動態修改。常用於替換被測試程式碼的部分執行環境,或將輸入依賴或輸出依賴替換成更容易測試的物件或函式。測試結束後,無論結果是通過還是失敗,程式碼都會復原(所有修改都會撤銷)
例如:修改環境變數monkey.setenv('HOME',tmpdir.mkdir('home'))