我使用easy_install在 Mac 上安装了pytest,并开始为项目编写测试,其文件结构如下:
repo/ |--app.py |--settings.py |--models.py |--tests/ |--test_app.py
py.test在repo目录中运行,一切都会按照您预期的方式运行。
py.test
但是,当我在 Linux 或 Windows 上尝试执行相同的操作时(两者都安装了 pytest 2.2.3),只要它第一次从我的应用程序路径导入某些内容,它就会发出警报。例如,from app import some_def_in_app。
from app import some_def_in_app
我是否需要编辑我的PATH才能在这些系统上运行py.test ?
您遇到的问题可能是由于运行时设置 Python 路径的方式造成的pytest。在某些系统上,当前目录不会自动添加到 Python 路径中,从而导致测试文件尝试从项目导入模块时出现导入错误。
pytest
以下是一些解决方案
PYTHONPATH
您可以修改PYTHONPATH环境变量以包含 ropytest。
在 Linux 或 MacOS 上:
export PYTHONPATH=$(pwd) pytest pytest ``
在 Windows 上:
set PYTHONPATH=%cd% pytest
conftest.py
您可以conftest.py在您的中添加一个文件tests目录和 msys.path包括PYTHONPATH`。
中添加一个文件
目录和 m
包括
创建conftest.py文件tests直的
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__), '..'))) ``
您可以使用--rootdiroppytest到 sppytest公关
--rootdir
pytest --rootdir=.
pytest.ini
您可以创建一个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`目录
repo
cd repo pytest py
这些解决方案应该有帮助pytest正确的