web-dev-qa-db-de.com

Wie misst man die Codeabdeckung in Golang?

Hat es jemand geschafft, Codeabdeckung für Go-Komponententests zu generieren? Ich kann kein Tool dafür im Web finden.

84
George Atsev

Beachten Sie, dass Go 1.2 (Q4 2013, RC1 ist verfügbar) jetzt Ergebnisse der Testabdeckung anzeigt. :

Eine wichtige Neuerung von go test ist, dass es jetzt berechnen und mit Hilfe eines neuen, separat installierten "go tool cover "zeigen die Ergebnisse der Testabdeckung an .

Das Werkzeug cover ist Teil des Befehls go.tools Subrepository . Es kann durch Ausführen installiert werden

$ go get golang.org/x/tools/cmd/cover

Das Cover-Tool macht zwei Dinge.

  • Erstens, wenn "go test "erhält das -cover, wird es automatisch ausgeführt, um die Quelle für das Paket neu zu schreiben und Instrumentierungsanweisungen einzufügen. Der Test wird dann wie gewohnt kompiliert und ausgeführt, und es werden grundlegende Abdeckungsstatistiken gemeldet:
$ go test -coverprofile fmtcoverage.html fmt
ok      fmt 0.060s  coverage: 91.4% of statements
$

Zweitens können für detailliertere Berichte verschiedene Flags für "Go Test" eine Coverage-Profildatei erstellen, die das Coverage-Programm mit "go tool cover ", kann dann analysieren.

Frank SheararErwähnungen :

Die neuesten Versionen von Go (19.09.2013) verwenden:

go test -coverprofile <filename> <package name>

Details zum Generieren und Analysieren von Abdeckungsstatistiken finden Sie durch Ausführen der Befehle

$ go help testflag
$ go tool cover -help

Ivan Black erwähnt in den Kommentaren :

go test -coverprofile cover.out und dann
go tool cover -html=cover.out -o cover.html öffnet cover.html im Browser

Ich möchte nicht einmal warten, bis sich der Browser öffnet, also habe ich diesen Alias ​​definiert:

alias gc=grep -v -e " 1$" coverage.out

Dass ich nur gc eingebe und eine Liste aller Zeilen habe nicht noch abgedeckt (hier: mit einem coverage.out line not endend mit "1 ").

101
VonC

Go wird mit einem großartigen Tool zum Testen und Abdecken geliefert. Obwohl alle Go-Tools gut dokumentiert sind go tool cover -help Ich würde vorschlagen, zu lesen Der Artikel über die Titelgeschichte im offiziellen Go-Blog . Es gibt viele Beispiele und ich kann es nur empfehlen!

Ich habe diese Funktion in meinem ~/.bash_profile. (Sie können es einfach in das Terminal einfügen, um es auszuprobieren).

cover () { 
    t="/tmp/go-cover.$$.tmp"
    go test -coverprofile=$t [email protected] && go tool cover -html=$t && unlink $t
}

Dann einfach cd in einen go project/package Ordner und tippe cover. Dies öffnet ein visuelles Tool im Browser, das Ihnen den getesteten und nicht getesteten Code für jede Datei im aktuellen Paket anzeigt. Sehr nützlicher Befehl! Ich kann es nur empfehlen, um herauszufinden, was noch nicht zu 100% getestet wurde! Die angezeigten Ergebnisse sind pro Datei. In der Dropdown-Liste oben links sehen Sie die Ergebnisse für alle Dateien.

Mit diesem Befehl können Sie auch die Abdeckung eines Pakets überprüfen, zum Beispiel:

cover fmt

Die Ausgabe in terminal von diesem Befehl wäre:

ok      fmt 0.031s  coverage: 91.9% of statements

Zusätzlich dazu sehen Sie in Ihrem Browser dieses Tool in Rot alle Codezeilen, die nicht mit Tests abgedeckt sind:

enter image description here

Es ist auch möglich, die HTML-Coverage-Datei einfach zu speichern, anstatt sie in einem Browser zu öffnen. Dies ist sehr nützlich, wenn Ihre Tests + Berichterstattung von einem CI-Tool wie Jenkins ausgeführt werden. Auf diese Weise können Sie die Coverage-Dateien von einem zentralen Server aus bereitstellen, und das gesamte Team kann die Coverage-Ergebnisse für jeden Build anzeigen.

32
Pavel Nikolov

Es ist richtig hier , einige Dokumente hier .

$ go tool
6a
6c
6g
6l
addr2line
api
cgo
cov
dist
ebnflint
fix
gotype
nm
objdump
pack
pprof
prof
vet
yacc
$ go tool cov -h
usage: cov [-lsv] [-g substring] [-m minlines] [6.out args...]
-g specifies pattern of interesting functions or files
go tool cov: exit status 1
$

Ich habe es nicht benutzt, das ist alles was ich weiß.

5
zzzz

Zusätzlich zu den guten Antworten oben finde ich diese drei Zeilen der einfachste Weg, um es zu bekommen (was alle Pakete beinhaltet):

go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html

Beachten Sie, dass Sie in der HTML-Datei eine Dropdown-Schaltfläche finden, die Sie zu allen Dateien weiterleitet.

4
Sharon Katz

Wenn Sie die nicht abgedeckten Linien nach Funktion direkt in einem Terminal sehen möchten, habe ich das Cover-Tool für diesen Zweck umgeschrieben. Es ist verfügbar unter https://github.com/gregoryv/uncover .

Verwendung

go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out

Screenshot

enter image description here

2
dot7

Inspiriert von den Hilfemenüs und anderen Antworten auf diese Frage, führen Sie einfach Folgendes aus:

f=cover.out; if [ -f $f ]; then rm $f; fi; go test ./... -coverprofile $f && \
go tool cover -html $f
1
030

Eine schnelle und einfache Möglichkeit ist die Verwendung des Coverage-Tools, das im Lieferumfang von go enthalten ist:

$ go test -coverprofile cp.out // Gibt das Coverage in Prozent eines Liners aus

Nachdem Sie den obigen Befehl ausgeführt haben, möchten Sie die Codeabdeckung (wie verdeckte Anweisungen und verpasste usw.) visuell anzeigen.

$ go tool cover -html = cp.out

Hinweis: Sie müssen die obigen Befehle in dem Ordner ausführen, in dem Sie die Abdeckung sehen möchten

Versuchen Sie es mit gaia-docker/base-go-build Docker-Image.

Dies ist ein Docker-Image, das alles enthält, was Sie zum Erstellen und Testen der Abdeckung benötigen. Wenn Sie die Testabdeckung in einem Docker-Container ausführen, wird der Ordner . Cover mit den Ergebnissen der Testabdeckung Ihres Projekts erstellt.

docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh

Das Testabdeckungsskript wird auf den Ordnern aller Projekte ausgeführt und generiert innerhalb des . Cover Ordners Junit- und Abdeckungsberichte für jeden Ordner sowie einen kombinierten Abdeckungsbericht aller Projekte. Tests.

Codecov schlägt auch ein Skript vor, mit dem Abdeckungsergebnisse erfasst werden: mehrere Dateien

0
Effi Bar-She'an

Testberichterstattung für Golang

go get github.com/axw/gocov/gocov go get -u gopkg.in/matm/v1/gocov-html

Überprüfen Sie, ob es richtig installiert ist und Sie von Ihrem Terminal aus Zugriff haben

Führen Sie den Testfall aus

Wenn Sie den Testfall ausführen, wird die .json-Datei basierend auf der Datei erneut erstellt. Sie erhalten den Code Coverage Report in einer .html-Datei

gocov test >your_Coverage_report.json

Sobald Ihr Testfall abgeschlossen ist, erstellen Sie mit .json einen Bericht in einer .html-Datei

gocov-html your_Coverage_report.json >your_Coverage_report.html

Referenz

GoTest Coverage Tool für go lang

Go Test Report Tool

Alternative Methode

Go Native Test-Berichterstattung

go test -coverprofile=coverage.out
go tool cover -html=coverage.out
0
muthukumar