如何在py.test中加载自定义插件
我在写一个自定义插件,用来收集py.test的结果,并把这些结果保存到一个rst格式的文件里。最后,我想把这个文件放到Sphinx文档中。
我把插件写在了当前工作目录下的myplugin.py
模块里。然后我调用了
py.test -p myplugin ../mytool/test
结果出现了一个错误:ImportError: No module named myplugin
。
我还尝试过用这样的方式调用它:
py.test -p .myplugin ../mytool/test
这是相对导入的方式,但也没有成功。
我该如何正确使用这个插件呢?
文档里提供了关于插件检测的以下信息:
工具启动时的插件发现顺序 pytest在启动时以以下方式加载插件模块:
首先加载所有内置插件
然后加载通过setuptools入口点注册的所有插件。
接着预先扫描命令行中的-p名称选项,并在实际解析命令行之前加载指定的插件。
然后加载所有的conftest.py文件,这些文件是根据命令行调用推断出来的:
如果没有指定测试路径,就使用当前目录作为测试路径(如果存在),加载conftest.py和相对于第一个测试路径目录部分的test*/conftest.py。请注意,pytest在工具启动时不会在更深层的子目录中找到conftest.py文件。通常,把conftest.py文件放在顶层测试或项目根目录是个好主意。
最后递归加载所有在conftest.py文件中由pytest_plugins变量指定的插件。
2 个回答
如果你想从当前目录加载一个插件,你也可以直接用 python -m
来调用 pytest
:
python -m pytest -p myplugin
这样你就不需要特别设置 PYTHONPATH
了。从官方文档来看:
用
pytest
和python -m pytest
的区别用
python -m pytest [...]
来运行 pytest,而不是直接用pytest [...]
,这两者的效果几乎是一样的,唯一的不同是前者会把当前目录添加到 `sys.path` 中。更多信息可以查看通过 python -m pytest 调用 pytest 的方法。
如果这个插件无法被导入,那是因为它不在 sys.path
这个路径里。你可以试着通过 PYTHONPATH
变量来手动添加它:
PYTHONPATH=/path/to/dir/of/myplugin py.test -p myplugin ../mytool/test