Immer wieder habe ich mich, beim Versuch einen fehlgeschlagenen Test in PyCharm zu debuggen, gewundert wieso meine Haltepunkte misachtet werden. Um dies zu vermeiden führe ich pytest in PyCharm inzwischen immer mit der Option --no-cov aus.

PyCharm-Konfiguration für pytest mit --no-cov

Das Plugin pytest-cov hilft einem wunderbar dabei einen Überblick über die Testabdeckung zu behalten. Um es nicht immer explizit aktivieren zu müssen bietet es sich an dieses über einen passenden Eintrag in der pytest.ini zu tun.

[pytest]
addopts = --cov=example

In PyCharm hat das Plugin allerdings nur einen geringen Mehrwert, denn dort achte ich eigentlich weniger auf Ausgabe von PyTest, denn ich bekomme ich ja grafisch angezeigt wenn Tests fehlschlagen. Möchte ich mir die Testabdeckung ansehen, so bietet mir PyCharm eine eigene Möglichkeit diese einzusammeln, samt passender Visualisierung.

Dafür kollidiert pytest-cov aber mit dem Debugger von PyCharm. Denn beide registrieren sich per sys.settrace um allen ausgeführten Code inspizieren zu können. Nutzt man pytest-cov innerhalb des Debuggers, überschreibt es dessen dort hinterlegte Funktion. Damit hat der Debugger dann nicht mehr die Möglichkeit in die Ausührung einzugreifen. Um dies zu vermeiden muss man pytest-cov durch die Option --no-cov deaktiveren. Damit fehlt dann zwar auch die Information zur Testabdeckung, aber dafür hat PyCharm ja, wie gesagt, seine eigene Funktionalität.