2010-11-16 35 views
21

(Tôi đang sử dụng Python 2.6 và nose.)Python: Làm thế nào để tạo các tệp tạm thời trong bộ thử nghiệm của tôi?

Tôi đang viết kiểm tra cho ứng dụng Python của mình. Tôi muốn một thử nghiệm để mở một tập tin mới, đóng nó, và sau đó xóa nó. Đương nhiên, tôi thích rằng điều này sẽ xảy ra bên trong một thư mục tạm thời, bởi vì tôi không muốn để thùng rác hệ thống tập tin của người dùng. Và, nó cần phải là hệ điều hành chéo.

Tôi làm cách nào?

Trả lời

12

Xem mô-đun tempfile trong thư viện chuẩn - phải là tất cả những gì bạn cần.

25

FWIW sử dụng py.test bạn có thể viết:

def test_function(tmpdir): 
    # tmpdir is a unique-per-test-function invocation temporary directory 

Mỗi chức năng thử nghiệm bằng cách sử dụng "tmpdir" chức năng lập luận sẽ nhận được một thư mục rỗng sạch, tạo ra như là một thư mục con của "/ tmp/pytest-NUM "(linux, win32 có đường dẫn khác nhau) trong đó NUM được tăng cho mỗi lần chạy thử nghiệm. Ba thư mục cuối cùng được lưu giữ để dễ dàng kiểm tra và những thư mục cũ hơn sẽ tự động bị xóa. Bạn cũng có thể đặt thư mục tạm thời cơ sở với py.test --basetemp=mytmpdir.

Đối tượng tmpdir là một đối tượng py.path.local mà cũng có thể sử dụng như thế này:

sub = tmpdir.mkdir("sub") 
sub.join("testfile.txt").write("content") 

Nhưng nó cũng tốt để chỉ chuyển nó sang một "chuỗi" đường dẫn:

tmpdir = str(tmpdir) 
+0

Có thể sử dụng 'tmpdir' funcarg với phương pháp thiết lập/teardown xUnit trong py.test không? Vì vậy, ví dụ: thay đổi từ 'def setup_method (self, method)' thành 'def setup_method (self, method, tmpdir)'? – KomodoDave

+0

tmpdir có thể được sử dụng nếu bạn trang trí phương pháp thiết lập của mình bằng '' @ pytest.fixture (autouse = True) '', trong trường hợp đó '' setup_method'' có thể nhận các đồ đạc như các đồ đạc thông thường nhất. Xem các tài liệu đồ đạc cho ý nghĩa của vật cố định. – hpk42

4

Thay vì sử dụng trực tiếp tempfile tôi đề xuất sử dụng trình quản lý ngữ cảnh cho trình quản lý ngữ cảnh - quản lý ngữ cảnh sẽ loại bỏ thư mục trong mọi trường hợp (thành công/thất bại/ngoại lệ) về cơ bản không có bản mẫu.

Sau đây là cách nó có thể được sử dụng:

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... 

Tôi đã sử dụng một phiên bản nhà phát triển (thực hiện khá ngắn - dưới 20 lines) lên đến mức, khi tôi cần thiết để sử dụng nó ở đâu đó khác nữa, vì vậy tôi nhìn xung quanh nếu có một gói sẵn sàng để cài đặt, và thực sự có: tempdir

+0

tempdir không có trong lib chuẩn: '' 'ImportError: Không có module nào có tên tempdir''' – dashesy

+0

gói không thể tìm thấy bằng pip! 'pip3 search tempdir' không hiển thị gì cả. – kap

+0

Tôi nhận được điều này khi thử: AttributeError: __exit__ –

Các vấn đề liên quan