Error al debuggear PYTEST en PyCharm

Error al debuggear PYTEST en PyCharm

Pycharm es el mejor IDE de python, claro también esto aplica a Intellij IDEA y su plugin de python, normalmente el debuggear en estos IDEs es muy sencillo y te da mucha informacion, pero en ciertos casos me he topado con errores, bueno simplemente no funciona el debug y luego de mucho buscar encontré la forma de arreglarlo, asi que veremos estos 2 casos y espero que esto les sirva.

Configuración del proyecto usando pyproject con poetry

Una de las mejores herramientas para manejar proyectos en python es poetry, no voy a entrar en mucho detalle en este tema, pero colocare un pyproject.toml muy básico:

[tool.poetry]
name = "test"
version = "1.0.0"
description = "test"
authors = ["Hector Miuler Malpica Gallegos <miuler@gmail.com>"]

[tool.poetry.dependencies]
python = "^3.11"

[tool.poetry.group.test.dependencies]
pytest = "^7.3.2"
pytest-cov = "^4.1.0"
pytest-xdist = { version = "^3.3.1", extras = ["psutil"] }

[tool.pytest.ini_options]
addopts = "-n auto"
testpaths = ["tests"]


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

PyCharm , el debug y los errores

Ahora para ilustrar el problema, solo voy a poner un simple test.

import unittest

class MyTestCase(unittest.TestCase):
    def test_something(self):
        print("Miuler")      # BREAKPOINT #
        self.assertEqual(True, True)

def test_something():
    print("Miuler")          # BREAKPOINT #
    assert True

if __name__ == '__main__':
    unittest.main()

Si ejecuta el debug tal y como esta el pyproject, el debug de pycharm no se para en los breakpoints marcados, y esto se puede deber a 2 problemas.

  1. pytest-cov

Si esta intentando correr un test y en la ejecucion tiene el argumento --cov=. a algo similar, el debug no funcionara, o por lo menos no parará en ningún breakpoint que coloquen, por lo que simplemente debes de quitar cualquier referencia a --cov , con esto ya funcionará.

  1. pytest-xdist

Si tiene addopts = "-n auto" en su pyproject.toml, debe de quitarlo, esto se debe a que con esa configuración pytest intentara usar todos los cpus para correr ciertas tareas en paralelo, pero el debug no se lleva bien esta configuracion y los breakpoints dejan de funcionar.

Estas son los dos motivos por lo que pasa esto, algunos links de referencia:

https://stackoverflow.com/questions/40718760/unable-to-debug-in-pycharm-with-pytest

https://gist.github.com/Miuler/61926c5c7e8adc9f7d35f8e2171629d6