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"
]
}
- 注意 C:\Users\user\.virtualenvs\backend-Vg-KBKTA\Scripts\python.exe 是 pipenv 的有效路径 shell [(1) 当我输入 bash: pipenv --venv (2) 它在我启动 django 调试器时起作用]
到目前为止,我已经尝试过:
- 根据更新我的pytest
- 将我的 tests.py 文件的名称更改为 test_example.py
根据
- 根据 (2)
中相同的 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 故事
- 我在谷歌上搜索了调试 Django 测试的方法,并最终找到了一条 Whosebug 评论,这让我找到了这个 https://github.com/Microsoft/vscode-python/issues/3911
- 那个 github 问题提到了一个适配器,这导致我下载了 little fox 团队的 VS 代码扩展:“Python Test Explorer for Visual Studio Code”,下载量为 262,853截至 2021 年 1 月 24 日。
- 现在当我在 git bash 中 运行 pytest --collect-only 时,我 运行 进入错误:应用程序尚未加载。这把我带到了我第一次发现 pytest-django
的地方
pytest-django 故事
- 阅读 pytest-django 文档
- 制作了具有以下内容的 pytest.ini 文件:
[pytest]
DJANGO_SETTINGS_MODULE = testprojectname.settings
python_files = tests.py test_*.py *_tests.py
- testprojectname 是django项目的名称
现在我注意到我在 tests.py 中做的测试上面有可点击的调试用词。单击调试测试需要一段时间才能启动,但它允许代码在红点 VS 代码断点处停止。
clickable words for debugging above test
虽然这就是我所需要的,但我也注意到我现在可以 运行 来自 VS 代码测试资源管理器的测试,所以我不再需要使用 pipenv shell 在 bash 到 运行 所有的测试。 VS code test explorer found test
这是使 Django 测试达到 运行 的通用方法 full vscode 支持
- 配置 python 测试
- 选择单元测试
- 根目录
test*.py
- 然后每个测试用例需要如下所示:
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
我正在尝试调试我的第一个 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"
]
}
- 注意 C:\Users\user\.virtualenvs\backend-Vg-KBKTA\Scripts\python.exe 是 pipenv 的有效路径 shell [(1) 当我输入 bash: pipenv --venv (2) 它在我启动 django 调试器时起作用]
到目前为止,我已经尝试过:
- 根据更新我的pytest
- 将我的 tests.py 文件的名称更改为 test_example.py
根据
- 根据 (2) 中相同的 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 故事
- 我在谷歌上搜索了调试 Django 测试的方法,并最终找到了一条 Whosebug 评论,这让我找到了这个 https://github.com/Microsoft/vscode-python/issues/3911
- 那个 github 问题提到了一个适配器,这导致我下载了 little fox 团队的 VS 代码扩展:“Python Test Explorer for Visual Studio Code”,下载量为 262,853截至 2021 年 1 月 24 日。
- 现在当我在 git bash 中 运行 pytest --collect-only 时,我 运行 进入错误:应用程序尚未加载。这把我带到了我第一次发现 pytest-django
pytest-django 故事
- 阅读 pytest-django 文档
- 制作了具有以下内容的 pytest.ini 文件:
[pytest]
DJANGO_SETTINGS_MODULE = testprojectname.settings
python_files = tests.py test_*.py *_tests.py
- testprojectname 是django项目的名称
现在我注意到我在 tests.py 中做的测试上面有可点击的调试用词。单击调试测试需要一段时间才能启动,但它允许代码在红点 VS 代码断点处停止。 clickable words for debugging above test
虽然这就是我所需要的,但我也注意到我现在可以 运行 来自 VS 代码测试资源管理器的测试,所以我不再需要使用 pipenv shell 在 bash 到 运行 所有的测试。 VS code test explorer found test
这是使 Django 测试达到 运行 的通用方法 full vscode 支持
- 配置 python 测试
- 选择单元测试
- 根目录
test*.py
- 然后每个测试用例需要如下所示:
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