Welcher code ist nicht von Unittest abgedeckt?!?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

In meinem 6809 Emulator hab ich nun mittlerweile echt viel unittests gemacht. Ich frage mich, wie ich raus bekommen kann, welche Code Teile nicht von tests abgedeckt sind.

Wie kann man das machen?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Such doch mal nach "Code Coverage Tools" für Python; wenn es welche gibt, wäre das das Mittel der Wahl :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das ist schon mal ein gutes Stichwort...

https://wiki.python.org/moin/CodeCoverage

Ein Tool ist wohl http://nedbatchelder.com/code/coverage/ ... Liefert dann sowas: http://nedbatchelder.com/code/coverage/sample_html/
Bringt mir aber jetzt nix, weil ich möchte ja wissen, welche Teile nicht getestet sind und nicht Statistiken das X% nicht getestet sind ;)


Das scheint das zu liefern: http://www.fiber-space.de/EasyExtend/do ... erage.html


Wahrscheinlich gibt es noch so einiges... Aber was ist aktuelle der "heiße Scheiß" dazu?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@jens: ``coverage annotate`` zeigt dir, welche Teile deines Codes bei der Programmausführung betreten werden und welche niemals betreten werden. Beispiel aus der Doku:

Code: Alles auswählen

# A simple function, never called with x==1 

> def h(x): 
      """Silly function."""
-     if 0:   #pragma: no cover
-         pass
>     if x == 1: 
!         a = 1
>     else: 
>         a = 2 
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

snafu hat geschrieben:@jens: ``coverage annotate`` zeigt dir, welche Teile deines Codes bei der Programmausführung betreten werden und welche niemals betreten werden. Beispiel aus der Doku:
Welches Paket/Doku meinst du jetzt?

Wie sind die Meinungen zu https://coveralls.io ?
Wobei es da auch zwei Anbindungen gibt:
1. https://github.com/coagulant/coveralls-python
2. https://github.com/z4r/python-coveralls

Welche ist "besser"? Erfahrungen?

django-cms nutzt es. Das Ergebnis eines Datei sieht dann so aus: https://coveralls.io/files/231750231

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Es war coverage.py gemeint: http://nedbatchelder.com/code/coverage/cmd.html (runterscrollen bis zum annotate-Beispiel)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ja, cool! Generiert auch schöne HTML Dateien.

Hab es so gemacht:

Code: Alles auswählen

~$ sudo pip2 install coverage

.../path/to/DragonPy$ coverage2 run --source=dragonpy setup.py test
.../path/to/DragonPy$ coverage2 coverage2 html
.../path/to/DragonPy$ firefox htmlcov/index.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab versucht das ganze auch bei coveralls.io über travis CI ans rennen zu bekommen, geht aber noch nicht.

Am Ende eines Tests steht:
The command "coverage run --source=dragonpy setup.py test" exited with 0.
after_success
$ coveralls
Submitting coverage to coveralls.io...
Source file is not python dragonpy/MC6809data/CPU6809make_Instructions
Coverage submitted!
Couldn't find a repository matching this job.
'url'
Done. Your build exited with 0.
Siehe: https://travis-ci.org/jedie/DragonPy/builds/29047830

Bei coveralls.io kommt nichts an: https://coveralls.io/r/jedie/DragonPy


Mein configs:

.travis.yml

Code: Alles auswählen

language: python
python:
  - "2.7"
install:
  - pip install coveralls
script:
  coverage run --source=dragonpy setup.py test
after_success:
  coveralls
https://github.com/jedie/DragonPy/blob/ ... travis.yml


.coveralls.yml

Code: Alles auswählen

service_name: travis-pro
repo_token: 1OI4obkPMbvZy6i3ADYYPgxFulDJGOIU7
s. https://github.com/jedie/DragonPy/blob/ ... eralls.yml


Geht das ganze nur wirklich dann, wenn man den bezahl-Account Travis Pro hat?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Nun hab ich auch mal coveralls.io ans laufen bekommen. Zwar nicht für das eingeschlafene DragonPy Projekt, aber für PyLucid: https://coveralls.io/r/jedie/PyLucid

Im Grunde sind nur zwei Dateien notwendig:
https://github.com/jedie/PyLucid/blob/d ... travis.yml
https://github.com/jedie/PyLucid/blob/d ... coveragerc

travis-ci.org schickt beim erfolgreichen Testdurchlauf die Daten nach coveralls.io
Sieht in den Logs dann so aus:
The command "coverage run ./setup.py test" exited with 0.
$ coveralls
Submitting coverage to coveralls.io...
Coverage submitted!
Job #13.1
https://coveralls.io/jobs/4621174

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten