所以,我只是失去了一天试图找出为什么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) 我正在寻找一个pytest结构,可以将灯具与测试完全分开。这种分离的原因是我想将夹具目录作为外部项目包含在Subversion中,并在多个项目之间共享。
所需结构的树
project
| conftest.py
|
+---fixtures
| __init__.py
| conftest.py
| fixture_cifs.py
| fixture_ftp.py
| fixture_service.py
|
\---tests
| test_sometest1.py
| test_sometest2.py
|
\---configurations
sometest1.conf
sometest2.conf
Run Code Online (Sandbox Code Playgroud)
我想在单独的文件中实现每个灯具的功能,以避免出现一个巨大的缺陷conftest.py。conftest.py只会包含包装器,以返回每个带有注释的灯具的实例@pytest.fixture。当和文件都在同一目录中时conftest.py,将夹具与测试一起使用是没有问题的。fixture_*.pytest_*.py
然而,当灯具在一个子目录中分离我从pytest一个错误fixture 'cifs' not found,available fixtures: ...。我还没有找到任何文档说明如何将固定装置放置在之外test_*.py或conftest.py附近test_*.py,但是也没有任何文件表明这也不起作用。
使用pytest时,如何将灯具放置在它们自己的子目录中?