py.test“导入文件不匹配”,尽管名称不同(仅限Windows)

时间:2015-03-16 10:49:06

标签: pytest

我对py.test相当新,并试图为一些遗留代码设置几个简单的黑盒测试。目录结构看起来像这样:

X:\
   conftest.py
   prgm_A\
      src\
      test\
         test_A.py
   prgm_B\
      src\
      test\
         test_B.py

当我从X:\运行py.test时,在Windows 7(或XP)中使用py.test v.2.6.3,py.test返回以下类型的错误消息:

___________ ERROR collecting /prgm_A/test/test_A.py __________________
import file mismatch:
imported module 'test_A' has this __file__ attribute:
  X:\prgm_A\test\test_A.py
which is not the same as the test file we want to collect:
  X:\\prgm_A\test\test_A.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for 
your test file modules
<and the same for B>

我删除了__pycache__和.pyc文件,但是没有用。在驱动器号码之后额外的反斜杠看起来真的很可疑,但我很确定我不应该为此负责。

当我尝试在linux中运行相同的测试时(尽管程序是为windows编译的),py.test v.2.5.1没有同样的问题。

到目前为止,我的解决方法是从自己的测试目录中为每个单独的程序运行测试,但是在我们的计算机迁移到Windows 7之后,这已停止工作。

有什么想法吗?


其他事实/观察

  1. 我忘了说测试曾经在XP下使用早期的py.test?,只要我下到X:\ prgm_ [AB] \ test并从那里运行py.test。
  2. 迷信:在文件结构中插入一个额外的级别,将所有内容从X:\移动到X:\ one_extra_level,没有任何区别。
  3. 我设法用这个最小的例子重现了这个问题:

    # conftest.py:
    import pytest
    
    def returns_xyz():
        return "xyz"
    
    @pytest.fixture(scope="session")
    def provider():
    """Provides a subprogram which returns the string 'xyz'."""
        return returns_xyz
    
    # prgm_[AB]\test\test_[AB].py:
    import pytest
    def test_xyz(provider):
        assert "xyz" == provider()
    

4 个答案:

答案 0 :(得分:1)

解决此问题所需的一切是删除python路径文件。它是一个包含此扩展程序.pyc的文件,如果您的测试或项目可用,则还会删除文件夹__pycache__

拉​​明

答案 1 :(得分:0)

问题转移到https://github.com/pytest-dev/pytest/issues/702

这不是一个bug,据我所知,两个测试模块的python模块名称是相同的

py.test抱怨不同的文件以相同的模块名称结尾,从而破坏了细节

你可以验证吗?

修改

已被验证为错误

答案 2 :(得分:-1)

删除项目目录中的所有.pyc文件 执行命令:find。名称* .pyc-删除

对我有用!

答案 3 :(得分:-1)

here所述,您只需在测试文件夹中添加一个__init__.py文件即可完成操作。