Einstiegsprobleme mit Python code coverage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1205
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Einstiegsprobleme mit Python code coverage

Beitrag von buhtz » 29.04.2022 10:12:48

Ich steige nicht so richtig durch mit Python's code Coverage. Die Original-Doku ist in meiner Wahrnehmung mehr eine technische Referenz als ein Einsteiger-Dokument. Auf Mouse vs. Python gibt es auch einen guten Artikel, der das Grundkonzept von code coverage erläutert, sich in der Anwendung (dem Aufruf), aber auf ein einziges py-File konzentriert.

Vielleicht missverstehe ich das Ziel der Anwendung. Aber ich möchte einfach nur wissen, ob meine tests/test_*.py Dateien auch alles aufrufen, was sich in ./src/hyperorg (mein Produktivcode) befindet.

Mein Problem ist, dass ganze für ein vollständiges Projekt (bspw: hyperorg im src-Layout) überhaupt zum Laufen zu bekommen und den Output "sinnvoll" zu gestalten.

1. Aufruf
Mir ist klar, dass ich nach einem run ein report machen muss, um Ergebnisse zu sehen. Aber coverage in verschiedenen Aufrufvarianten (mit/ohne run, mit/ohne Pfad-Angabe zu src/hyperorg, mit/ohne --source=) bringt Fehler oder leeren Output.

2. Output
Es gibt da noch green, dass neben einer "hübscheren" unittest-Ausgabe mit der Option -r auch coverage Ausgaben produziert. Hier bekomme ich Output, aber der ist ein bisschen zu viel, weil hier auch dependencies mit berücksichtigt werden, die mich doch gar nicht interessieren. Das sieht dann z.B. so aus

Code: Alles auswählen

Name                                                                  Stmts   Miss  Cover
-----------------------------------------------------------------------------------------
/usr/local/lib/python3.9/dist-packages/green/exceptions.py                3      0   100%
/usr/local/lib/python3.9/dist-packages/green/loader.py                  258     96    63%
/usr/local/lib/python3.9/dist-packages/green/output.py                  100     32    68%
/usr/local/lib/python3.9/dist-packages/green/process.py                  58     10    83%
/usr/local/lib/python3.9/dist-packages/green/result.py                  383    150    61%
/usr/local/lib/python3.9/dist-packages/green/runner.py                   71     21    70%
/usr/local/lib/python3.9/dist-packages/green/suite.py                    91     16    82%
/usr/local/lib/python3.9/dist-packages/orgparse/__init__.py              22      4    82%
/usr/local/lib/python3.9/dist-packages/orgparse/date.py                 236    111    53%
/usr/local/lib/python3.9/dist-packages/orgparse/extra.py                 81     58    28%
/usr/local/lib/python3.9/dist-packages/orgparse/inline.py                 4      1    75%
/usr/local/lib/python3.9/dist-packages/orgparse/node.py                 478    243    49%
/usr/local/lib/python3.9/dist-packages/orgparse/utils/__init__.py         0      0   100%
/usr/local/lib/python3.9/dist-packages/orgparse/utils/_py3compat.py       2      1    50%
/usr/local/lib/python3.9/dist-packages/orgparse/utils/py3compat.py        9      3    67%
/usr/local/lib/python3.9/dist-packages/unidecode/__init__.py             56     45    20%
src/hyperorg/__init__.py                                                 12      0   100%
src/hyperorg/content.py                                                  96      4    96%
src/hyperorg/exporter.py                                                 96      7    93%
src/hyperorg/reader.py                                                   26      2    92%
-----------------------------------------------------------------------------------------
TOTAL                                                                  2082    804    61%
Was hier IMHO nicht reingehört ist green, orgparse und unidecode. Bei diesen Kandidaten ist mir auch unklar, worauf sich die Cover-% überhaupt beziehen. Mich interessiert hier src/hyperorg/*.py.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Antworten