我使用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错误不是出现在您自己的包上,而是出现在包的requirements.txt中的git安装包上,解决方案是切换到可编辑的安装模式。

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

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

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

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

其他回答

由于无法导入模块,测试经常会中断。

经过研究,我发现系统在错误的地方查看文件,我们可以通过在相同的文件夹中复制包含模块的文件来轻松克服这个问题,以便正确导入。

另一个解决方案建议是更改导入的声明,并向MutPy显示单元的正确路径。然而,由于多个单元可能具有这种依赖关系,这意味着我们也需要在它们的声明中提交更改,因此我们更喜欢简单地将单元移动到文件夹中。

根据Dirk Avery在Medium上的一篇文章(我个人经验也支持),如果你在项目中使用虚拟环境,那么你就不能使用系统范围的pytest安装;您必须在虚拟环境中安装它并使用该安装。

特别是,如果在两个地方都安装了它,那么简单地运行pytest命令将不起作用,因为它将使用系统安装。正如其他答案所描述的,一个简单的解决方案是运行python -m pytest而不是pytest;这是因为它使用了环境版本的pytest。或者,你也可以卸载系统版本的pytest;重新激活虚拟环境后,pytest命令应该可以工作。

有点遗憾的是,这是Python中的一个问题……但在我看来,加入这个环境变量是最舒服的方式:

export PYTHONPATH=$PYTHONPATH:.

你可以把这一行放在你的。zshrc或。bashrc文件中。

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

python -m pytest tests/

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

因为没有人建议这样做,你也可以在pytest.ini文件中传递测试的路径:

[pytest]
...
testpaths = repo/tests

参见文档:https://docs.pytest.org/en/6.2.x/customize.html#pytest-ini

Visual Studio Code的副作用:它应该在UI中拾取单元测试。