目次- tmpディレクトリとファイルの使用
- tmp_path Fixtureメソッド
- tmp_path_factory Fixtureメソッド
- tmpdir Fixtureメソッド
- tmpdir_factory Fixtureメソッド
- デフォルトのテンポラリディレクトリルート
戻る: Pytest公式チュートリアル
tmpディレクトリとファイルの使用
tmp_path Fixtureメソッド
3.9バージョンで追加された機能
tmp_pathは、テストの実行に使用する独立したテンポラリディレクトリをテンポラリディレクトリのルート内に作成するために使用できます。
tmp_pathはpathlib/pathlib2.Pathオブジェクトです。以下はテストでの使用例です:
# test_tmp_path.pyファイルの内容
import os
TEST_CONTENT = "テストコンテンツ"
def test_create_file(tmp_path):
test_dir = tmp_path / "サブディレクトリ"
test_dir.mkdir()
test_file = test_dir / "テスト.txt"
test_file.write_text(TEST_CONTENT)
assert test_file.read_text() == TEST_CONTENT
assert len(list(tmp_path.iterdir())) == 1
assert 0
このテストを実行すると、assert 0の行を除いて、他のアサーションはすべて正常にパスします:
$ pytest test_tmpdir.py
=========================== テストセッション開始 ============================
platform linux -- Python 3.x.y, pytest-4.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR, inifile:
1件のテストが収集されました
test_tmpdir.py F [100%]
================================= 失敗 =================================
_____________________________ 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
========================= 0.12秒で1件の失敗 ==========================
tmp_path_factory Fixtureメソッド
2.8バージョンで追加された機能
tmpdir_factoryはセッションスコープのfixtureで、他のテストケースやfixtureから任意のテンポラリディレクトリを作成するために使用できます。
例えば、テストスイートがローカルディスク上に動的に生成された大きな画像ファイルを使用する必要がある場合、各テストケースで個別に計算して生成する代わりに、テストセッション全体で一度だけ生成して時間を節約できます:
# conftest.pyファイルの内容
import pytest
@pytest.fixture(scope="session")
def large_image_file(tmpdir_factory):
generated_image = create_expensive_image()
file_name = tmpdir_factory.mktemp("data").join("image.png")
generated_image.save(str(file_name))
return file_name
# test_image.pyの内容
def test_image_analysis(large_image_file):
loaded_image = load_image(large_image_file)
# ヒストグラムの計算とテスト
詳細についてはtmpdir_factory APIを参照してください。
tmpdir Fixtureメソッド
tmpdir_factory Fixtureメソッド
デフォルトのテンポラリディレクトリルート
デフォルトでは、テンポラリディレクトリはシステムのテンポラリディレクトリのサブディレクトリとして作成されます。ベース名はpytest-数字になります。数字は各テスト実行ごとに増加します。さらに、3番目以降のテンポラリディレクトリは削除されます。
デフォルトのテンポラリディレクトリ設定は以下のように変更できます:
pytest --basetemp=mydir
ローカルマシンでテストを分散実行する場合、pytestはサブプロセスのテンポラリディレクトリルートを設定し、すべてのテンポラリデータが単一のテスト実行ごとのテンポラリディレクトリルートに配置されるようにします。