gpt4 book ai didi

python - 在顶级 conftest 之外添加 pytest 选项的方法?

转载 作者:行者123 更新时间:2023-11-28 21:21:06 25 4
gpt4 key购买 nike

我有一个定义测试支持模块的项目,包括像这样的包子目录中的 py.test 插件:

bokeh/_testing
├── __init__.py
├── plugins
│ ├── __init__.py
│ ├── bokeh_server.py
│ ├── examples_report.jinja
│ ├── examples_report.py
│ ├── file_server.py
│ ├── implicit_mark.py
│ ├── integration_tests.py
│ ├── jupyter_notebook.py
│ ├── log_file.py
│ └── pandas.py
└── util
├── __init__.py
├── api.py
├── examples.py
├── filesystem.py
├── git.py
└── travis.py

一些插件需要使用 parser.addoption 定义新的选项。我希望在各自的插件模块中进行这些调用。但是,如果我这样做,并将这些插件包含在测试文件中,例如

# test_examples.py
pytest_plugins = (
"bokeh.testing.plugins.bokeh_server",
"bokeh.testing.plugins.examples_report",
)

# pytest.mark.examples test code here

然后 pytest 提示任何自定义命令行选项未定义:

(base) ❯ py.test -s -v -m examples --diff-ref FETCH_HEAD --report-path=examples.html
usage: py.test [options] [file_or_dir] [file_or_dir] [...]
py.test: error: unrecognized arguments: --diff-ref --report-path=examples.html
inifile: /Users/bryanv/work/bokeh/setup.cfg
rootdir: /Users/bryanv/work/bokeh

我找到的唯一方法是在顶级 的单个 pytest_addoption 中收集 ALL 自定义选项>conftest.py:

# conftest.py
pytest_plugins = (
"bokeh.testing.plugins.implicit_mark",
"bokeh.testing.plugins.pandas",
)

# Unfortunately these seem to all need to be centrally defined at the top level
def pytest_addoption(parser):
parser.addoption(
"--upload", dest="upload", action="store_true", default=False, help="..."
)

# ... ALL other addoptions calls for all plugins here ...

正如我所说,这可行,但在代码组织方面非常不灵活。最好有一种方法可以将 examples.py 插件的选项添加到 examples.py 模块中,其中包含代码涉及到。

另一种可能是在顶层 conftest.py 中引入所有插件,但有些插件非常重量级,例如依赖于 Selenium,我不想要求安装所有这些只是为了运行基本测试。

是否有另一种方法可以实现此目的,如果可以,如何实现?

最佳答案

如上所述,从 Pytest 3.6.2 开始,必须添加选项 “仅在位于测试根目录的插件或 conftest.py 文件中,因为 pytest 在测试过程中如何发现插件启动。”

关于python - 在顶级 conftest 之外添加 pytest 选项的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51311988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com