运行 py.test 会话开始之前的文件,没有 __init__

Run a file before py.test session starts, without __init__

除了__init__.py之外,有没有办法在开头运行一个.py?

我的问题是我需要在文件解析改变之前保存当前数据库状态。因为我有更改的临时测试变量,但如果我可以在解析之前存储状态,这将是固定的,因为我可以在会话结束时恢复它。

我需要 运行 .py 不仅在实际测试会话开始之前而且在其他文件被解析之前。

示例:

console> py.test tests/test_example.py
- 需要它 运行 这里
collecting 0 items
tests/test_example.py
==== test session starts ====
conftest.py运行在这里

你可以说 __init__.py 是一个解决方案,但是当测试目录中有 __init__.py 时,pytest 运行 将所有内容作为一个模块。 (而不是来自 py._path.pyimport 的 运行ning,而是来自 __init__.py 的 运行s)这打破了我所有的测试和导入整个测试/目录

也许我可以创建自己的 py._path.pyimport,这似乎不是 safest/correct 的方式。或者是否可以在 py._path.pyimport 之后调用 __init__.py 并仍然调用 运行?

你可以使用 pytest 的 plugin hooksconftest.py 来做到这一点。

我不确定哪个挂钩最适合您的情况。大概 pytest_configure.

例如,conftest.py:

def pytest_configure():
    print("Hello World")

你得到:

$ py.test
Hello World!
=================== test session starts ====================
platform linux -- Python 3.5.1, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
[..]

collecting 120 items