目次

前のトピックへ

xdist: pytest の分散テストプラグイン

次のトピックへ

skip と xfail: 成功しないテストを扱う

一時ディレクトリとファイル

テスト関数の引数 ‘tmpdir’

tmpdir という関数の引数を一意な一時ディレクトリを提供するのに使えます。それは デフォルトの一時ディレクトリ に作成されます。

tmpdiros.path メソッドやさらに他のメソッドを提供する py.path.local オブジェクトです。次にテストでの使用例を紹介します:

# test_tmpdir.py の内容
import os
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

このテストを実行すると、最終行の assert 0 が失敗して tmpdir の値が見えます:

$ py.test test_tmpdir.py
=========================== test session starts ============================
platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items

test_tmpdir.py F

================================= FAILURES =================================
_____________________________ test_create_file _____________________________

tmpdir = local('/tmp/pytest-23/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.02 seconds =========================

デフォルトの一時ディレクトリ

デフォルトでは、テスト向けの一時ディレクトリは、システムの一時ディレクトリのサブディレクトリとして作成されます。基本となる名前は pytest-NUM となり NUM はテストが実行される度に数字が増えます。また、3世代より古い一時ディレクトリは削除されます。

デフォルトの一時ディレクトリの設定は次のように書き換えられます:

py.test --basetemp=mydir

py.test は、ローカルマシン上で分散テストを行うとき、全ての一時データが basetemp ディレクトリの配下で実行されてテスト毎に一意になるよう、サブプロセスに対しても basetemp ディレクトリをちゃんと設定します。