conftest.py ImportError:没有名为Foo的模块

时间:2017-09-13 16:57:05

标签: python pytest

我有以下目录结构

this.ctaEnter.click(() => {
    this.removeLoadContent(); //<- error was here
})

Foo.py包含

/home/ubuntu/test/
 - Foo/
   - Foo.py
   - __init__.py
 - Test/
   - conftest.py
   - __init__.py
   - Foo/
     - test_Foo.py
     - __init__.py

conftest.py包含:

class Foo(object):
  def __init__(self):
    pass

test_Foo.py包含:

import pytest

import sys
print sys.path

from Foo.Foo import Foo

@pytest.fixture(scope="session")
def foo():
  return Foo()

如果我运行pytest。在Test文件夹中,然后我收到一个错误,它无法找到模块Foo:

class TestFoo():
  def test___init__(self,foo):
    assert True

在conftest.py中打印出的sys.path似乎包含/ home / ubuntu / test路径,所以它应该能够找到Foo.py,对吗?

事情是它只有在我将conftest.py移动到下面的文件夹时才有效。

我运行pytest 3.2.2

2 个答案:

答案 0 :(得分:3)

错误表示由于int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(pieCenter.getWidth(), View.MeasureSpec.EXACTLY); int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(pieCenter.getHeight(), View.MeasureSpec.EXACTLY); 而无法加载conftest.py。尝试在foo fixture中移动你的导入,如下所示:

ImportError

答案 1 :(得分:1)

我建议您做的是设置一个虚拟环境,然后在该虚拟环境中安装Foo模块。

pip install virtualenv
virtualenv venv
. ./venv/bin/activate

要安装本地模块,您需要一个setup.py文件:

from setuptools import setup

setup(
    name='foo',
    version='0.0.1',
    author='My Name',
    author_email='my.name@email.com',
    packages=['Foo'],
)

然后,您可以在虚拟环境pip install -e .中安装Foo模块。然后,当您运行测试时,他们将接您的模块。

有关更完整,更长期的方法,请考虑使用需求文件。 我通常将所需的模块放在两个名为requirements.txt(用于生产)和requirements-test.txt(用于运行测试)的文件中。 因此,在requirements.txt中输入您的Foo类所需的内容,例如

json
flask==1.0.2

其中已指定flask的版本,但未指定json的版本。然后在requirements-test.txt文件中输入以下内容:

-r requirements.txt
pytest
-e .

第一行意味着在安装requirements-test.txt时也会获得所有requirements.txt-e .是解决您在此处遇到的问题的灵丹妙药,即它安装了Foo模块(以及此存储库中可能包含的任何其他模块)。

要安装requirements-test.txt文件,请运行:

pip install -r requirements-test.txt

现在您可以运行测试,它将找到您的Foo模块。这也是解决CI问题的好方法。