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


当前回答

将pytest本身作为一个模块运行: Python -m pytest测试

例如,当项目层次结构为package/src package/tests时,在从src导入的测试中,就会发生这种情况。作为模块执行会将导入视为绝对的,而不是相对于执行位置。

其他回答

我不确定为什么是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解释器路径中,而无需修改每个测试文件,设置环境变量或混淆绝对/相对路径。

在跟随Flask教程时,我也遇到了同样的问题,我在官方的Pytest文档中找到了答案。 这与我(以及其他许多人)过去做事的方式有一点不同。

你必须在你的项目根目录下创建一个setup.py文件,至少包含以下两行代码:

from setuptools import setup, find_packages
setup(name="PACKAGENAME", packages=find_packages())

其中PACKAGENAME是应用程序的名称。然后你要用pip安装它:

pip install -e .

-e标志告诉pip以可编辑或“开发”模式安装包。因此,下次运行pytest时,它应该在标准PYTHONPATH中找到你的应用程序。

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

我得到这个错误由于一些更简单的(你甚至可以说微不足道)。我还没有安装pytest模块。所以一个简单的安装python-pytest为我解决了这个问题。

'pytest'将在setup.py中作为测试依赖项列出。确保您也安装了测试需求。