我使用easy_install在Mac上安装pytest,并开始为一个具有如下文件结构的项目编写测试:

repo/
   |--app.py
   |--settings.py
   |--models.py
   |--tests/
          |--test_app.py

py运行。在repo目录中进行测试,一切都如您所料。

但是当我在Linux或Windows上尝试同样的事情时(两者都有pytest 2.2.3),每当它第一次从我的应用程序路径导入某些东西时,它就会发出吠叫。例如,from app import some_def_in_app。

我需要编辑我的PATH来运行py。测试这些系统?


当前回答

是,如果您cd到测试目录,则源文件夹不在Python的路径中。

你有两个选择:

手动将路径添加到测试文件中。就像这样: 导入sys, OS myPath = os.path.dirname(os.path.abspath(__file__)) sys.path。insert(0, myPath + '/../') 使用env var PYTHONPATH=../运行测试。

其他回答

是,如果您cd到测试目录,则源文件夹不在Python的路径中。

你有两个选择:

手动将路径添加到测试文件中。就像这样: 导入sys, OS myPath = os.path.dirname(os.path.abspath(__file__)) sys.path。insert(0, myPath + '/../') 使用env var PYTHONPATH=../运行测试。

对我来说,问题是Django生成的tests.py和tests目录。删除tests.py就解决了这个问题。

我也遇到过类似的问题。pytest无法识别安装在我工作的环境中的模块。

我通过在相同的环境中安装pytest来解决这个问题。

我不确定为什么是py。test不会在PYTHONPATH本身中添加当前目录,但这里有一个变通方法(从存储库的根目录执行):

python -m pytest tests/

它能工作是因为Python为你在PYTHONPATH中添加了当前目录。

我得到这个错误,因为我使用相对导入不正确。在OP示例中,test_app.py应该使用e.g.导入函数。

from repo.app import *

然而,尽管__init__.py文件分散在文件结构中,但这不会起作用,并会创建所见的ImportError类型,除非文件和测试文件在同一目录中。

from app import *

以下是我在一个项目中所做的一个例子:

这是我的项目结构:

microbit/
microbit/activity_indicator/activity_indicator.py
microbit/tests/test_activity_indicator.py

为了能够从test_activity_indicator.py访问activity_indicator.py,我需要:

使用正确的相对导入启动test_activity_indicator .py:

    from microbit.activity_indicator.activity_indicator import *

在整个项目结构中放置__init__.py文件:

    microbit/
    microbit/__init__.py
    microbit/activity_indicator/__init__.py
    microbit/activity_indicator/activity_indicator.py
    microbit/tests/__init__.py
    microbit/tests/test_activity_indicator.py