目錄:
- 安裝及入門
- 使用和調(diào)用方法
- 原有TestSuite使用方法
- 斷言的編寫和報告
- Pytest fixtures:清晰 模塊化 易擴展
- 使用Marks標記測試用例
- Monkeypatching/對模塊和環(huán)境進行Mock
- 使用tmp目錄和文件
- 捕獲stdout及stderr輸出
- 捕獲警告信息
- 模塊及測試文件中集成doctest測試
- skip及xfail: 處理不能成功的測試用例
- Fixture方法及測試用例的參數(shù)化
- 緩存: 使用跨執(zhí)行狀態(tài)
- unittest.TestCase支持
- 運行Nose用例
- 經(jīng)典xUnit風格的setup/teardown
- 安裝和使用插件
- 插件編寫
- 編寫鉤子(hook)方法
- 運行日志
- API參考
- 優(yōu)質(zhì)集成實踐
- 片狀測試
- Pytest導入機制及sys.path/PYTHONPATH
- 配置選項
- 示例及自定義技巧
- Bash自動補全設置
使用tmp目錄和文件
tmp_path
裝置
3.9版本新功能
你可以使用tmp_path
在臨時目錄根目錄中創(chuàng)建一個獨立的臨時目錄以供測試調(diào)用。
tmp_path
是一個pathlib/pathlib2.Path
對象。以下是測試用法的示例:
# test_tmp_path.py文件內(nèi)容
import os
CONTENT = u"content"
def test_create_file(tmp_path):
d = tmp_path / "sub"
d.mkdir()
p = d / "hello.txt"
p.write_text(CONTENT)
assert p.read_text() == CONTENT
assert len(list(tmp_path.iterdir())) == 1
assert 0
運行這個,我們可以看到,除了assert 0
這一行门驾,其他斷言都正常測試通過:
$ pytest test_tmpdir.py
=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-4.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR, inifile:
collected 1 item
test_tmpdir.py F [100%]
================================= FAILURES =================================
_____________________________ test_create_file _____________________________
tmpdir = local('PYTEST_TMPDIR/test_create_file0')
def test_create_file(tmpdir):
p = tmpdir.mkdir("sub").join("hello.txt")
p.write("content")
assert p.read() == "content"
assert len(tmpdir.listdir()) == 1
> assert 0
E assert 0
test_tmpdir.py:7: AssertionError
========================= 1 failed in 0.12 seconds =========================
'tep_dir_factory' 裝置
2.8版本新功能
tmpdir_factory
是一個session范圍的fixture,可用于從任何其他測試用例及fixture中創(chuàng)建任意臨時目錄。
例如,假設你的測試套件需要使用程序動態(tài)生成在本地磁盤上的一個大圖片隆圆,你可以整個測試session中只生成一次以節(jié)省時間,而不是為每個用例都在自己的tmpdir
中計算并生成一次:
# conftest.py文件內(nèi)容
import pytest
@pytest.fixture(scope="session")
def image_file(tmpdir_factory):
img = compute_expensive_image()
fn = tmpdir_factory.mktemp("data").join("img.png")
img.save(str(fn))
return fn
# contents of test_image.py
def test_histogram(image_file):
img = load_image(image_file)
# 計算和測試histogram
有關(guān)詳細信息翔烁,請參閱tmpdir_factory API渺氧。
默認臨時目錄根目錄
默認情況下,臨時目錄創(chuàng)建為系統(tǒng)臨時目錄的子目錄蹬屹。 基本名稱將是pytest-數(shù)字
猎唁,其中數(shù)字將隨著每次測試運行而遞增。 此外贞瞒,第3個以后的臨時目錄會被刪除。
你可以如下所示兔毒,修改默認的臨時目錄設置:
pytest --basetemp=mydir
在本地計算機上分發(fā)測試時,pytest
會為子進程配置臨時目錄根目錄,以便所有臨時數(shù)據(jù)都落在單個每個測試運行的臨時目錄根目錄。