我的项目结构:
cool_project/
tests/
cool_dir/
test_cool.py
conftest.py
test_main.py
Run Code Online (Sandbox Code Playgroud)
我正在使用 pytest 版本 6.2.1 和 python 3.8.7。我有一个conftest.py,包含pytest_sessionstart。如果conftest.py 不在我的测试目录(即tests 目录)的根目录中,则 pytest_sessionstart 将不会运行(例如,如果它位于tests/cool_dir 中)。但是,如果我将 conftest.py 移动到主目录(即测试),那么它就可以工作。那么,当 conftest.py 不在测试目录中时,如何使 pytest_sessionstart 运行?我目前有代码:tests/cool_dir/conftest.py
print("CONFTEST ENTERED")
def pytest_sessionstart(session):
print("pytest_sessionstart has been called")
Run Code Online (Sandbox Code Playgroud)
测试/cool_dir/test_cool.py
def test_bar():
assert True
Run Code Online (Sandbox Code Playgroud)
测试/test_main.py
def test_foo():
assert True
Run Code Online (Sandbox Code Playgroud)
“CONFTEST ENTERED”是我运行时唯一显示的内容pytest -s
您可以在我的repl.it repl上测试代码 。
我在遇到同样的问题后发现了你的问题:我的conftest.py文件同时包含一个pytest_sessionstart钩子和一个pytest_sessionfinish钩子——当我运行它时,似乎只有完成钩子被调用。
然后,我在虚拟环境下的实际 Pytest 源文件中放置了几对语句import pdb; pdb.set_trace()——一对在调用“start”挂钩之前,一对在调用“finish”挂钩之前。
我发现,当调用“start”挂钩时:我的conftest定义的挂钩尚未处理/加载。但后来,当调用“finish”钩子时,我的conftest定义的钩子被加载、找到并调用。
仔细查看文档,应该在收集之前调用“start”挂钩。
如果您的 conftest 文件恰好位于启动它的当前目录中,则 Pytest 在收集之前会加载它。
但是,如果您的conftest位于子文件夹的更深处,那么直到发生收集时才找到它,因此永远不会在“开始”挂钩时间调用。
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |