(我正在使用Python 2.6和nose
。)Python:我如何在我的測試套件中創建臨時文件?
我正在爲我的Python應用程序編寫測試。我想要一個測試來打開一個新文件,關閉它,然後刪除它。當然,我更喜歡這會發生在一個臨時目錄中,因爲我不想垃圾用戶的文件系統。而且,它需要跨OS。
我該怎麼做?
(我正在使用Python 2.6和nose
。)Python:我如何在我的測試套件中創建臨時文件?
我正在爲我的Python應用程序編寫測試。我想要一個測試來打開一個新文件,關閉它,然後刪除它。當然,我更喜歡這會發生在一個臨時目錄中,因爲我不想垃圾用戶的文件系統。而且,它需要跨OS。
我該怎麼做?
查看標準庫中的tempfile模塊 - 應該是您所需要的。使用
FWIW py.test你可以寫:
def test_function(tmpdir):
# tmpdir is a unique-per-test-function invocation temporary directory
使用「TMPDIR」功能參數將得到一個乾淨的空目錄中的每個測試功能,爲的/ tmp/pytest-NUM的」子目錄中創建「(linux,win32有不同的路徑),其中每次測試都增加NUM。最後三個目錄保留以便檢查,舊的目錄會自動刪除。您也可以使用py.test --basetemp=mytmpdir
設置基本臨時目錄。
的TMPDIR對象是py.path.local對象,也可以使用這樣的:
sub = tmpdir.mkdir("sub")
sub.join("testfile.txt").write("content")
但它也蠻好,只是它轉換成「串」路徑:
tmpdir = str(tmpdir)
直接使用tempfile我建議使用上下文管理器包裝器 - 上下文管理器負責在基本上沒有樣板的情況下在所有情況下(成功/失敗/異常)移除目錄。
這裏是如何可以用:
from tempdir import TempDir
...
# in some test:
with TempDir() as d:
temp_file_name = os.path.join(d.name, 'your_temp_file.name')
# create file...
# ...
# asserts...
我一直用一個本土版(實現很短 - 下20線)到一點,當我需要的地方使用它否則,所以我查看了是否有一個包可以安裝,確實有:tempdir
可以''tmpdir' funcarg與py.test中的setup/teardown xUnit方法一起使用嗎?所以例如從'def setup_method(self,method)'改成'def setup_method(self,method,tmpdir)'? – KomodoDave 2013-08-16 21:09:06
如果你用''@ pytest.fixture(autouse = True)'裝飾你的設置方法,可以使用tmpdir,在這種情況下,''setup_method''可以接收fixtures作爲正常的pytest fixture。請參閱固定裝置文檔以瞭解固定裝置的含義。 – hpk42 2013-09-06 12:42:28