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


当前回答

正如Luiz Lezcano Arialdi所指出的,正确的解决方案是将您的包安装为可编辑包。

因为我正在使用Pipenv,所以我考虑在他的回答中逐步添加如何使用Pipenv将当前路径安装为可食用路径,允许运行pytest而不需要任何破坏代码或丢失文件。

你需要有以下最小的文件夹结构(文档):

package/
    package/
        __init__.py
        module.py
    tests/
        module_test.py
    setup.py

Setup.py主要有以下最小代码(文档):

import setuptools

setuptools.setup(name='package', # Change to your package name
                 packages=setuptools.find_packages())

然后你只需要运行pipenv install——dev -e。Pipenv将当前路径安装为可编辑包(——dev标志是可选的)(文档)。

现在您应该能够毫无问题地运行pytest了。

其他回答

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

你有两个选择:

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

正如Luiz Lezcano Arialdi所指出的,正确的解决方案是将您的包安装为可编辑包。

因为我正在使用Pipenv,所以我考虑在他的回答中逐步添加如何使用Pipenv将当前路径安装为可食用路径,允许运行pytest而不需要任何破坏代码或丢失文件。

你需要有以下最小的文件夹结构(文档):

package/
    package/
        __init__.py
        module.py
    tests/
        module_test.py
    setup.py

Setup.py主要有以下最小代码(文档):

import setuptools

setuptools.setup(name='package', # Change to your package name
                 packages=setuptools.find_packages())

然后你只需要运行pipenv install——dev -e。Pipenv将当前路径安装为可编辑包(——dev标志是可选的)(文档)。

现在您应该能够毫无问题地运行pytest了。

如果没有工作,请确保test_module.py被列在正确的src目录下。 有时它会给出ModuleNotFoundError,不是因为模块放错了地方,也不是因为export PYTHONPATH="${PWD}:${PYTHONPATH}"不工作,而是因为test_module.py被放在了tests文件夹下的错误目录中。

它应该是递归的1对1映射关系,而不是根文件夹应该命名为“tests”,包含测试代码的文件名应该以“test_”开头, 例如,

./nlu_service/型号/变压器.py

-测试- test_transformers models . py。


这就是我的经历。

我的解决方案:

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

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

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

如果这个pytest错误不是出现在您自己的包上,而是出现在包的requirements.txt中的git安装包上,解决方案是切换到可编辑的安装模式。

例如,假设你的包的requirements.txt有如下一行:

git+https://github.com/foo/bar.git

您可以将其替换为以下内容:

-e git+https://github.com/foo/bar.git#egg=bar