Python 我可以让pytest doctest模块忽略一个文件吗?

Python 我可以让pytest doctest模块忽略一个文件吗?,python,pytest,doctest,Python,Pytest,Doctest,我们使用pytest来测试我们的项目,并且默认情况下启用了--doctest模块,以收集整个项目中的所有doctest 然而,有一个wsgi.py在测试收集期间可能无法导入,但我无法让pytest忽略它 我试着把它放在conftest.py中的collect\u ignore列表中,但是显然doctest模块没有使用这个列表 唯一有效的方法是将wsgi.py的整个目录放入pytest配置文件中的norecursedirs,但这显然隐藏了整个目录,这是我不想要的 有没有办法让doctest模块只忽

我们使用pytest来测试我们的项目,并且默认情况下启用了
--doctest模块
,以收集整个项目中的所有doctest

然而,有一个
wsgi.py
在测试收集期间可能无法导入,但我无法让pytest忽略它

我试着把它放在
conftest.py
中的
collect\u ignore
列表中,但是显然doctest模块没有使用这个列表

唯一有效的方法是将
wsgi.py
的整个目录放入pytest配置文件中的
norecursedirs
,但这显然隐藏了整个目录,这是我不想要的


有没有办法让doctest模块只忽略某个文件?

您可以使用hook有条件地从测试发现中排除一些文件夹。

如前所述,
pytest\u ignore\u collect
应该可以做到这一点。重要的是要注意,您应该将
conftest.py
放入根文件夹(运行测试的文件夹)。
例如:

自pytest v4.3.0以来,还有一个允许按模式忽略的
--ignore glob
标志。例子:
pytest--doctest modules--ignore glob=“*\uuu py3.py”dir/

对我来说,关键的部分是将这个
pytest\u ignore\u collect
钩子放在项目根目录的conftest.py中。我们在
tests
目录中有一个conftest.py,其中有一些设置,但将挂钩放在那里不起作用。hmmm。。。这只是给了我一大堆
E KeyError:“--doctest modules”
这可能会有帮助
def pytest_ignore_collect(path, config):
    """ return True to prevent considering this path for collection.
    This hook is consulted for all files and directories prior to calling
    more specific hooks.
    """
import sys

def pytest_ignore_collect(path):
    if sys.version_info[0] > 2:
        if str(path).endswith("__py2.py"):
            return True
    else:
        if str(path).endswith("__py3.py"):
            return True