gpt4 book ai didi

docker - 使用 VS Code 在 docker 容器中调试 Pytest

转载 作者:行者123 更新时间:2023-12-02 17:47:45 25 4
gpt4 key购买 nike

我在使用 VS Code 在 docker 容器中设置调试 py.test 代码时遇到了麻烦。

研究后:https://code.visualstudio.com/docs/python/debugging
还有这个:How to remote debug python code in a Docker Container with VS Code

我在 vscode 中设置了以下调试配置:

{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"localRoot": "${workspaceFolder}",
"remoteRoot": "/capi",
"port": 3000,
"secret": "secret_text",
"host": "localhost"
}

我已将此位导入到我的测试文件中:
import ptvsd
ptvsd.enable_attach("secret_text", address = ('0.0.0.0', 3000))
ptvsd.wait_for_attach()

我确保我在 docker-compose 文件中打开了那个 3000 端口:
 ports:
- 3000:3000

我仔细检查了端口是否打开:
nmap -p 3000 localhost

Starting Nmap 7.60 ( https://nmap.org ) at 2018-07-19 10:53 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000074s latency).

PORT STATE SERVICE
3000/tcp open ppp

Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds

似乎是这样。当我从容器运行 pytest 文件时,它会启动并等待调试器连接:
===================================================== test session starts =====================================================
platform linux2 -- Python 2.7.15, pytest-3.5.1, py-1.5.3, pluggy-0.6.0
rootdir: /capi, inifile:
plugins: requests-mock-1.5.0, xdist-1.14, metadata-1.7.0, html-1.16.1, cov-2.5.1
collecting 0 items

但是当我从 VS Code 运行这个配置时,似乎什么也没发生。

enter image description here
好像挂了。调试控制台或 docker 容器中没有任何内容。

我已经为一个简单的 hello-world.py 控制台应用程序设置了远程调试,仅用于测试,它似乎可以工作。所以我的假设是它与我正在尝试调试 pytest 的事实有关。

有没有人设法做到这一点?我会很感激一些帮助。

最佳答案

我遇到了同样的问题,你的帖子几乎解决了问题。
当我尝试实现您的解决方案时,我遇到了以下问题:

ImportError while loading conftest '/app/tests/conftest.py'.
tests/conftest.py:36: in <module>
ptvsd.enable_attach("secret_text", address=("0.0.0.0", 5678))
E TypeError: enable_attach() got multiple values for argument 'address'
删除“secret_text”值允许我点击 wait_for_attach()指向并成功将调试器附加到代码。我能够在我的测试中达到断点。谢谢!
.vscode/launch.json
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"localRoot": "${workspaceFolder}/path/to/code",
"remoteRoot": "/app",
"port": 5678,
"host": "localhost"
}
docker-compose.yml
ports:
- "5678:5678"
conftest.py
import ptvsd
ptvsd.enable_attach(address=("0.0.0.0", 5678))
ptvsd.wait_for_attach()
备注 :ptvsd 行放置在所有导入之后。
执行测试的 CLI 命令:
import subprocess
import click

@click.command()
def cli():
return subprocess.call("pytest test", shell=True)
调试测试的顺序:
  • docker-compose up (让容器运行)
  • docker-compose exec MODULE CONTAINER_NAME FUNCTION_THAT_EXECUTES_TEST
  • 在 VSCode 中附加调试器

  • 测试将执行并命中您设置的任何断点。

    关于docker - 使用 VS Code 在 docker 容器中调试 Pytest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51418726/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com