Pytest官方教程-08-使用tmp目錄和文件

目錄:

  1. 安裝及入門
  2. 使用和調用方法
  3. 原有TestSuite使用方法
  4. 斷言的編寫和報告
  5. Pytest fixtures:清晰 模塊化 易擴展
  6. 使用Marks標記測試用例
  7. Monkeypatching/對模塊和環(huán)境進行Mock
  8. 使用tmp目錄和文件
  9. 捕獲stdout及stderr輸出
  10. 捕獲警告信息
  11. 模塊及測試文件中集成doctest測試
  12. skip及xfail: 處理不能成功的測試用例
  13. Fixture方法及測試用例的參數(shù)化
  14. 緩存: 使用跨執(zhí)行狀態(tài)
  15. unittest.TestCase支持
  16. 運行Nose用例
  17. 經(jīng)典xUnit風格的setup/teardown
  18. 安裝和使用插件
  19. 插件編寫
  20. 編寫鉤子(hook)方法
  21. 運行日志
  22. API參考
    1. 方法(Functions)
    2. 標記(Marks)
    3. 鉤子(Hooks)
    4. 裝置(Fixtures)
    5. 對象(Objects)
    6. 特殊變量(Special Variables)
    7. 環(huán)境變量(Environment Variables)
    8. 配置選項(Configuration Options)
  23. 優(yōu)質集成實踐
  24. 片狀測試
  25. Pytest導入機制及sys.path/PYTHONPATH
  26. 配置選項
  27. 示例及自定義技巧
  28. Bash自動補全設置

使用tmp目錄和文件

tmp_path裝置

3.9版本新功能
你可以使用tmp_path 在臨時目錄根目錄中創(chuàng)建一個獨立的臨時目錄以供測試調用。

tmp_path是一個pathlib/pathlib2.Path對象。以下是測試用法的示例:

# test_tmp_path.py文件內容
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文件內容
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

有關詳細信息,請參閱tmpdir_factory API。

默認臨時目錄根目錄

默認情況下,臨時目錄創(chuàng)建為系統(tǒng)臨時目錄的子目錄。 基本名稱將是pytest-數(shù)字,其中數(shù)字將隨著每次測試運行而遞增。 此外,第3個以后的臨時目錄會被刪除。

你可以如下所示,修改默認的臨時目錄設置:

pytest --basetemp=mydir

在本地計算機上分發(fā)測試時,pytest會為子進程配置臨時目錄根目錄,以便所有臨時數(shù)據(jù)都落在單個每個測試運行的臨時目錄根目錄。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容