相关疑难解决方法(0)

如何让py.test识别子目录中的conftest.py?

所以,我只是失去了一天试图找出为什么py.test没有执行我的autouse,会话范围的设置和拆卸灯具.最后我偶然发现了(帽子提示这个SO评论!)插件文档中的这个小小的一点:

请注意,默认情况下,子目录中的conftest.py文件不会在工具启动时加载.

在我的项目中,我将py.test文件(conftest.py和测试文件)放在一个tests/子目录中,这似乎是一个非常标准的设置.如果我py.test在tests目录中运行,一切都正常运行.如果我py.test在项目根目录中运行,测试仍然运行,但设置/拆卸例程永远不会执行.

问题:

  • 什么是使用户能够从项目根目录正确运行测试的"规范"方法?把conftest.py根目录觉得很奇怪我的,因为我觉得所有的测试相关的文件应该留在tests子目录中.
  • 为什么(设计方面)不在conftest.py默认情况下未加载的子目录中?我发现这种行为至少可以说,考虑到默认情况下会发现子目录中的测试,所以在查找conftest文件时似乎也很少有额外的工作量.
  • 最后,如何conftest.py在子目录中加载(即远离默认值)?我在文档中找不到这个.如果可能的话,我想避免使用额外的控制台参数,那么我可以在配置文件中添加任何东西吗?

非常感谢任何洞察力和提示,我觉得当我可以为我的项目编写测试时,我很多时候会浪费/浪费时间来诊断这个问题.:-(

最小的例子:

# content of tests/conftest.py
# adapted from http://pytest.org/latest/example/special.html
import pytest
def tear_down():
    print "\nTEARDOWN after all tests"

@pytest.fixture(scope="session", autouse=True)
def set_up(request):
    print "\nSETUP before all tests"
    request.addfinalizer(tear_down)
Run Code Online (Sandbox Code Playgroud)

测试文件:

# content of tests/test_module.py
class TestClassA:
    def test_1(self):
        print "test A1 called"
    def test_2(self):
        print …
Run Code Online (Sandbox Code Playgroud)

python pytest

18
推荐指数
1
解决办法
9232
查看次数

如果我不随包分发 pytest 测试,如何组织它们?

正如pytest 文档中所建议的,我设置了我的包,目的不是将我的测试与我的包一起分发:

\n\n
setup.py\nmypkg/\n    __init__.py\n    mypkg/\n      appmodule.py  \ntests/\n    test_app.py\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我对如何确保这些测试在存在时正确运行(例如在 Travis CI 上或在项目目录的克隆中)感到困惑。

\n\n

我希望测试脚本中的导入应用于相邻mypkg/目录中的源(而不是任何mypkg可能安装在 中的源site-packages),但我遇到了令我困惑的错误。

\n\n

如果我遵循文档中的建议pytest并且不__init__.py添加tests/then

\n\n
from __future__ import absolute_import\nfrom mypkg.appmodule import * \n
Run Code Online (Sandbox Code Playgroud)\n\n

我明白了

\n\n
\n

导入错误:没有名为 mypkg.appmodule 的模块

\n
\n\n

当与

\n\n
from __future__ import absolute_import\nfrom ..mypkg.appmodule import * \n
Run Code Online (Sandbox Code Playgroud)\n\n

我明白了

\n\n
\n

ValueError:尝试在非包中进行相对导入

\n
\n\n

如果我忽略文档并包含一个__init__.py,那么对于后者我会得到

\n\n
\n

ValueError:尝试超出顶级包的相对导入

\n
\n\n

仅通过包含 …

software-distribution pytest python-2.7

5
推荐指数
1
解决办法
2185
查看次数