VSCode 调试 Django 测试时 pytest 测试发现失败

VSCode pytest test discovery fails when debugging Django tests

我正在尝试调试我的第一个 Django 测试,但 VSCode 返回:运行 0.000 秒内进行了 0 次测试。 另一方面,当我在 VSCode 终端或外部使用集成 git bash(我正在使用 windows OS)时,它 returns:运行 0.0014 秒内进行 1 次测试。它还回显 FAILED 和测试中有效错误的回溯。

我的vscodelaunch.json:

{   
    ...
    "configurations": [
        ...
        {
            "name": "Django Tests",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}\testprojectname\manage.py",
            "args": [
                "test"
            ],
            "django": true,
        }
    ]
}

我的vscodesettings.json:

{
    "python.pythonPath": "C:\Users\user\.virtualenvs\backend-Vg-KBKTA\Scripts\python.exe",
    "python.testing.pytestEnabled": true,
    "python.testing.nosetestsEnabled": false,
    "python.testing.unittestEnabled": false,
    "python.testing.pytestArgs": [
        "testprojectname"
    ]
}

到目前为止,我已经尝试过:

  1. 根据更新我的pytest
  2. 将我的 tests.py 文件的名称更改为 test_example.py 根据
  3. 根据 (2)
  4. 中相同的 link 将测试的 class 更改为前缀为 Test_

这是目前测试的样子


class Test_Contacts(unittest.TestCase):

    def test_create_contact_message(self):
        """Create a new contact message."""
        url = reverse('message-list')
        data = {
            'first_name': 'DabApps',
            'last_name': 'jack',
            'email': 'giehogho24h@gmo8y9tgail.com',
            'message': 'hi, how are you?',
            'message_type': 1
        }
        # this is just random code to cause an error
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(Message.objects.count(), 1)
        self.assertEqual(Message.objects.get().name, 'DabApps')

我没能解决原来的问题,但我找到了一个很好的解决方法。我现在可以在测试代码上方看到 'debug test'。我不确定为什么,但这可能是因为我安装了 pytest-django 或扩展 python test explorer ui.

python 测试探索者 ui 故事

  1. 我在谷歌上搜索了调试 Django 测试的方法,并最终找到了一条 Whosebug 评论,这让我找到了这个 https://github.com/Microsoft/vscode-python/issues/3911
  2. 那个 github 问题提到了一个适配器,这导致我下载了 little fox 团队的 VS 代码扩展:“Python Test Explorer for Visual Studio Code”,下载量为 262,853截至 2021 年 1 月 24 日。
  3. 现在当我在 git bash 中 运行 pytest --collect-only 时,我 运行 进入错误:应用程序尚未加载。这把我带到了我第一次发现 pytest-django
  4. 的地方

pytest-django 故事

  1. 阅读 pytest-django 文档
  2. 制作了具有以下内容的 pytest.ini 文件:
[pytest]
DJANGO_SETTINGS_MODULE = testprojectname.settings
python_files = tests.py test_*.py *_tests.py
  • testprojectname 是django项目的名称
  1. 现在我注意到我在 tests.py 中做的测试上面有可点击的调试用词。单击调试测试需要一段时间才能启动,但它允许代码在红点 VS 代码断点处停止。 clickable words for debugging above test

  2. 虽然这就是我所需要的,但我也注意到我现在可以 运行 来自 VS 代码测试资源管理器的测试,所以我不再需要使用 pipenv shell 在 bash 到 运行 所有的测试。 VS code test explorer found test

这是使 Django 测试达到 运行 的通用方法 full vscode 支持

  1. 配置 python 测试
    1. 选择单元测试
    2. 根目录
    3. test*.py
  2. 然后每个测试用例需要如下所示:
from django.test import TestCase

class views(TestCase):

    @classmethod
    def setUpClass(cls):
        import django
        django.setup()

    def test_something(self,):
        from user.model import something
        ...

您要导入的任何函数 都有 导入到测试用例中(如图所示)。设置测试 class 之前的 setUpClass 运行s 并将设置您的 django 项目。设置完成后,您可以在测试方法中导入函数。如果您尝试在脚本顶部导入 models/views ,它将引发异常,因为未设置 django。如果你有任何其他预初始化需要 运行 让你的 django 项目工作,运行 它在 setUpClass