conftest
解
侵入性最低的解决方案是conftest.py
在repo/
目录中添加一个空文件:
$ touch repo/conftest.py
而已。无需编写自定义代码来处理,sys.path
也无需记住拖动PYTHONPATH
或放入__init__.py
不属于它的目录中。
之后的项目目录:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
说明
pytest
conftest
在测试集合中寻找模块以收集自定义的钩子和固定装置,然后为了从中导入自定义的对象,请将pytest
的父目录添加conftest.py
到中sys.path
(在本例中为repo
目录)。
其他项目结构
如果你有其他的项目结构,将conftest.py
包中的根目录(包含软件包,但不是包本身的人,所以并没有包含__init__.py
),例如:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src
布局
尽管此方法可用于src
布局(放置conftest.py
在src
目录中):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
请注意,添加src
以PYTHONPATH
减轻src
布局的含义和好处!您将最终从存储库而不是已安装的软件包中测试代码。如果需要执行此操作,则可能根本不需要src
目录。
从这往哪儿走
当然,conftest
模块不仅仅是一些文件,可以帮助发现源代码。这是pytest
框架的所有特定于项目的增强和测试套件的自定义的地方。pytest
在conftest
整个文档中分散的模块上有很多信息; 开始于conftest.py
:本地按目录插件
同样,SO在conftest
模块上也有一个很好的问题:在py.test中,conftest.py文件的用途是什么?