小能豆

pytest 的 PATH 问题‘ImportError: 没有名为...的模块’

javascript

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

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

py.testrepo目录中运行,一切都会按照您预期的方式运行。

但是,当我在 Linux 或 Windows 上尝试执行相同的操作时(两者都安装了 pytest 2.2.3),只要它第一次从我的应用程序路径导入某些内容,它就会发出警报。例如,from app import some_def_in_app

我是否需要编辑我的PATH才能在这些系统上运行py.test ?


阅读 29

收藏
2024-07-04

共1个答案

小能豆

您遇到的问题可能是由于运行时设置 Python 路径的方式造成的pytest。在某些系统上,当前目录不会自动添加到 Python 路径中,从而导致测试文件尝试从项目导入模块时出现导入错误。

以下是一些解决方案

1. 修改PYTHONPATH

您可以修改PYTHONPATH环境变量以包含 ropytest

在 Linux 或 MacOS 上:

export PYTHONPATH=$(pwd)
pytest

pytest
``

在 Windows 上:

set PYTHONPATH=%cd%
pytest

2. 创建conftest.pyFi

您可以conftest.py在您的中添加一个文件tests目录和 msys.path包括PYTHONPATH`。

创建conftest.py文件tests直的

import sys
import os

sys.path.insert(

sys.path.inse


sys.pat


s
0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

``

3. 使用pytestO

您可以使用--rootdiroppytest到 sppytest公关

pytest --rootdir=.

4. 使用pytest.iniF

您可以创建一个pytest.inifpytest迪斯科

创建一个pytest.ini文件

[pytest]

testpaths

testp

t
testpaths = tests

前任

假设你的目录结构

repo/
   |--app.py
   |--settings.py
   |--models.py
   |--tests/
          |--test_app.py
          |--conftest.py  # if you choose this option
   |--pytest.ini  
   |--pytest.ini 

   |--pytest.

   |--py


# if you choose this option

如果你选择conftest.py选择conftest.py将要

import sys

impo

i
import os

sys.path.insert(

sy
0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

如果你pytest.ini选择pytest.ini将要看

[pytest]

test
testpaths = tests

现在,你应该可以运行pytest来自reporepo`目录

cd repo
pytest

py

这些解决方案应该有帮助pytest正确的

2024-07-04