我使用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。测试这些系统?


当前回答

我创建这个是为了回答你的问题和我自己的困惑。我希望这能有所帮助。注意py. conf文件中的PYTHONPATH。测试命令行和tox.ini。

https://github.com/jeffmacdonald/pytest_test

具体来说:您必须告诉py。测试和毒害在哪里找到您包含的模块。

py。测试你可以这样做:

PYTHONPATH=. py.test

使用tox,将这个添加到你的tox.ini:

[testenv]
deps= -r{toxinidir}/requirements.txt
commands=py.test
setenv =
    PYTHONPATH = {toxinidir}

其他回答

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

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

我开始得到奇怪的ConftestImportFailure: ImportError('没有模块命名…错误时,我不小心添加__init__.py文件到我的src目录(这不是一个Python包,只是一个容器的所有源代码)。

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

你有两个选择:

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

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

python -m pytest tests/

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

我的解决方案:

在test目录下创建conftest.py文件,包含:

import os
import sys
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/code/")

这将把感兴趣的文件夹添加到Python解释器路径中,而无需修改每个测试文件,设置环境变量或混淆绝对/相对路径。