【问题标题】:How to integrate VSCode with pytest ('test discovery fails')?如何将 VSCode 与 pytest 集成(“测试发现失败”)?
【发布时间】:2020-12-02 17:41:36
【问题描述】:

我无法将项目的单元测试集成到 VSCode 中。测试发现失败,因为 pytest 无法识别源文件。

(只是为了澄清,这是一个关于 VSCode 的问题,而不是关于 pytest。我在这里是因为 VSCode 将其问题部分链接到 SOF。如果我手动运行它们,测试工作正常。)

工具:pyenvpipenvpytest

项目布局:

/src -> source code
/tests/unit -> test code

.vscode/settings.json:

{
    "python.envFile": "${workspaceFolder}/.env",
    "python.testing.pytestEnabled": true,
    "python.testing.pytestArgs": [
        "tests"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false
    [...]
}

.env:

PYTHONPATH=./src

(注意:我认为 .env 在这里并不重要,根据this 评论,在使用 PYTHONPATH 变量下)

测试发现失败:

tests/unit/test_revoke_default_sg.py:7: in <module>
    from revokedefaultsg.app import RevokeDefaultSg, UnknownEventException
E   ModuleNotFoundError: No module named 'revokedefaultsg'
=========================== short test summary info ============================
ERROR tests/unit/test_revoke_default_sg.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.08s ===============================

这是因为./src不是python路径的一部分,所以测试无法导入源代码。

我可以通过添加到 PYTHONPATH 在 CLI/makefile 级别解决此问题:

PYTHONPATH=./src pytest

这按预期工作。

VSCode 的正确设置是什么?

我应该为测试创建一个启动配置吗?我已经开始研究这个,但无法让它与 pipenv 很好地工作。

【问题讨论】:

  • 这里有几个问题,pytest 本身应该有一个configuration file pytest.ini 是最简单的选项。然后,配置src 布局,setup.pypackage_dirthe simplest option。根据您的描述,如果您activated your venv,这是一个很好的问题。您的 PYTHONPATH 将与 OS 和/或 venv 相关,具体取决于您如何分离事物。应该大部分独立于 IDE...
  • 我是 PyCharm 用户,不知道 VSCode 是否自带测试功能。我刚才所说的是让工具在独立于 IDE 集成功能的控制台/shell 上工作的步骤。对于 IDE,我使用标准集成工具,为我刚才描述的部分内容提供 GUI(但大部分都必须手动配置)。
  • 我已经有一段时间没有这样做了,我的布局有所不同,但我最终在 .vscode/settings.json 文件中完成了至少一个项目: 1. 设置python.pythonPath 和 2. 设置 python.testing.pytestEnabled: true (我禁用了其他测试框架)。然后,通过pipenv run python -m pytest src 运行
  • 这似乎对JSONPYTHONPATH 非常具体,您可以考虑添加这些标签。
  • 我使用 pytest 和 Visual Code 已经有一段时间了。我通常做的是将测试放在 src 中。我会先尝试一下,看看配置是否还有其他问题。然后我会尝试摆弄用户 json。

标签: visual-studio-code pytest pipenv


【解决方案1】:

(这里是OP)

我认为集成到 VSCode 的关键是为 pytest 创建一个特定的启动配置(之前,我只有使用 Python 扩展创建的默认启动配置)。

我现在有两种配置(.vscode/launch.json):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Run Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "env": {
                "PYTHONPATH": "./src"
            }
        },
        {
            "name": "Python: pytest",
            "type": "python",
            "request": "launch",
            "module": "pytest",
            "cwd": "${workspaceRoot}",
            "env": {
                "PYTHONPATH": "./src"
            },
            "envFile": "${workspaceRoot}/.env",
            "console": "integratedTerminal",
        }
    ]
}

(project on GitHub)

在启动 VSCode 后运行此配置可以正确发现测试,而不会引发错误。但是,我还没有在不同的项目中尝试过。

另外,也许我没有找到 VSCode 文档的正确部分,但这感觉文档严重不足。我最终在 GitHub 上搜索了带有启动配置的要点,并将任何似乎有帮助的东西复制在一起......

【讨论】:

  • 绝妙的答案!这是我发现我可以发现所有测试并为 flasgger 调试它们的唯一方法......
猜你喜欢
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2023-03-06
  • 1970-01-01
  • 2017-07-09
  • 2018-12-03
  • 2016-11-02
相关资源
最近更新 更多