conftest
giải pháp
Giải pháp ít xâm lấn nhất là thêm một tệp trống có tên conftest.py
trong repo/
thư mục:
$ touch repo/conftest.py
Đó là nó. Không cần phải viết mã tùy chỉnh để xáo trộn sys.path
hoặc nhớ kéo PYTHONPATH
theo hoặc đặt__init__.py
vào các thư mục không thuộc về nó.
Thư mục dự án sau đó:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
Giải trình
pytest
tìm kiếm các conftest
mô-đun trên bộ sưu tập thử nghiệm để thu thập các móc và đồ đạc tùy chỉnh và để nhập các đối tượng tùy chỉnh từ chúng, pytest
thêm thư mục mẹ của conftest.py
vàosys.path
(trong trường hợp này làrepo
thư mục).
Cấu trúc dự án khác
Nếu bạn có cấu trúc dự án khác, hãy đặt conftest.py
thư mục gốc trong gói (gói chứa gói nhưng không phải là gói, vì vậy không chứa __init__.py
), ví dụ:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
bố trí
Mặc dù cách tiếp cận này có thể được sử dụng với src
bố cục (vị trí conftest.py
trong src
thư mục):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
hãy cẩn thận khi thêm vào src
để PYTHONPATH
giảm thiểu ý nghĩa và lợi ích của src
bố cục! Bạn sẽ kết thúc với việc kiểm tra mã từ kho lưu trữ chứ không phải gói đã cài đặt. Nếu bạn cần làm điều đó, có lẽ bạn không cần src
thư mục nào cả.
Đi đâu từ đây
Tất nhiên, conftest
các mô-đun không chỉ là một số tệp để giúp phát hiện mã nguồn; đó là nơi tất cả các cải tiến dành riêng cho dự án của pytest
khung và tùy chỉnh bộ thử nghiệm của bạn xảy ra. pytest
có rất nhiều thông tin về conftest
các mô-đun nằm rải rác trong các tài liệu của họ ; bắt đầu với conftest.py
: plugin mỗi thư mục cục bộ
Ngoài ra, SO có một câu hỏi tuyệt vời về conftest
các mô-đun: Trong py.test, việc sử dụng các tập tin conftest.py là gì?