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.pytrong 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.pathhoặc nhớ kéo PYTHONPATHtheo 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
pytesttìm kiếm các conftestmô-đ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, pytestthêm thư mục mẹ của conftest.pyvà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.pythư 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 srcbố cục (vị trí conftest.pytrong srcthư 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để PYTHONPATHgiảm thiểu ý nghĩa và lợi ích của srcbố 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 srcthư mục nào cả.
Đi đâu từ đây
Tất nhiên, conftestcá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 pytestkhung và tùy chỉnh bộ thử nghiệm của bạn xảy ra. pytestcó rất nhiều thông tin về conftestcá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ề conftestcác mô-đun: Trong py.test, việc sử dụng các tập tin conftest.py là gì?