Hat es jemand geschafft, Codeabdeckung für Go-Unit-Tests zu generieren? Ich kann kein Tool dafür im Web finden.
Hat es jemand geschafft, Codeabdeckung für Go-Unit-Tests zu generieren? Ich kann kein Tool dafür im Web finden.
Antworten:
Beachten Sie, dass in Go 1.2 (Q4 2013, rc1 ist verfügbar) jetzt die Ergebnisse der Testabdeckung angezeigt werden :
Eine wichtige Neuerung von
go test
ist, dass es jetzt diego tool cover
Ergebnisse der Testabdeckung berechnen und mithilfe eines neuen, separat installierten " " Programms anzeigen kann .Das
cover
Tool ist Teil desgo.tools
Subrepositorys . Es kann durch Ausführen installiert werden
$ go get golang.org/x/tools/cmd/cover
Das Cover-Tool macht zwei Dinge.
- Wenn "
go test
" das-cover
Flag erhält , 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 zum "Go-Test" eine Abdeckungsprofildatei erstellen, die das mit "
go tool cover
" aufgerufene Cover-Programm dann analysieren kann.
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 wird dann in Ihrem Standardbrowser
go tool cover -html=cover.out
geöffnetcover.out
Ich möchte nicht einmal warten, bis der Browser geöffnet wird, deshalb habe ich diesen Alias definiert:
alias gc=grep -v -e " 1$" cover.out
Dass ich nur tippe gc
und eine Liste aller noch nicht abgedeckten Zeilen habe (hier: mit einer coverage.out
Zeile, die nicht mit " 1
" endet ).
go test -coverprofile cover.out
und dann im Browser go tool cover -html=cover.out -o cover.html
öffnencover.html
go tool cover -html=cover.out
öffnet automatisch einen Browser, funktioniert aber auf meinem System nicht. Ich ziehe es vor, einen Browser offen zu halten und die Seite bei Bedarf zu aktualisieren.
Go wird mit einem fantastischen Tool zum Testen und zur Abdeckung geliefert. Obwohl alle Go-Tools gut dokumentiert sind, go tool cover -help
würde ich empfehlen, den Titelartikel im offiziellen Go-Blog zu lesen . 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 $@ && go tool cover -html=$t && unlink $t
}
Dann einfach cd
in einen Projekt- / Paketordner gehen und eingebencover
. 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 empfehle es dringend, um herauszufinden, was noch nicht zu 100% getestet wurde! Die angezeigten Ergebnisse sind pro Datei. In einem Dropdown-Menü 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 dieses Befehls im Terminal wäre:
ok fmt 0.031s coverage: 91.9% of statements
Darüber hinaus wird in Ihrem Browser in diesem Tool alle Codezeilen rot angezeigt, die nicht mit Tests abgedeckt sind:
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 + Abdeckung 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.
Zusätzlich zu den guten Antworten oben finde ich diese drei Zeilen der einfachste Weg, um es zu bekommen (der alle Pakete enthält):
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.
Es ist genau 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ß.
~/go/pkg/tool/linux_amd64
stimmt mit meinem letzten Go-Build von gestern überein.
Wenn Sie die unbedeckten Linien nach Funktion direkt in einem Terminal sehen möchten, habe ich das Abdeckungswerkzeug zu diesem Zweck neu geschrieben. Es ist unter https://github.com/gregoryv/uncover verfügbar .
Verwendung
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
Bildschirmfoto
Wenn Sie VSCode verwenden, wird diese Funktionalität sofort unterstützt ( standardmäßig deaktiviert ).
Aktivieren Sie einfach den Test für Save + Coverage Reporting
https://github.com/microsoft/vscode-go/wiki/On-Save-features
In Ihrem Editor wird sogar angezeigt, welche Zeilen nicht abgedeckt sind, was sehr praktisch ist.
Berichterstattungsbericht →
a) Führen Sie alle Tests aus und aktivieren Sie die Abdeckung -> go test ./... -coverprofile coverage.out
b) Abdeckung für einzelne Funktionen sowie Gesamtabdeckung erhalten → go tool cover -func coverage.out
c) Siehe die abgedeckten und die von Ihren Tests nicht abgedeckten Zeilen → go tool cover -html=cover.out -o coverage.html
. Öffnen Sie die coverage.html
hiermit im Browser generierte Datei und analysieren Sie die detaillierten Coverage-Informationen.
Eine schnelle und einfache Möglichkeit besteht darin, das mit dem integrierten Go gelieferte Coverage-Tool zu verwenden:
$ go test -coverprofile cp.out // Gibt die Abdeckung prozentual in einem Liner aus
Nachdem Sie den obigen Befehl ausgeführt haben, möchten Sie die Codeabdeckung visuell anzeigen (z. B. abgedeckte Anweisungen und verpasste Anweisungen usw.).
$ go tool cover -html = cp.out
Hinweis: Sie müssen die obigen Befehle in dem Ordner ausführen, in dem die Abdeckung angezeigt werden soll
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. Durch Ausführen der Testabdeckung in einem Docker-Container wird ein .cover- Ordner 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 in allen Projektordnern ausgeführt und in .cover generiert Ordner und Abdeckungsberichte für jeden Ordner sowie einen kombinierten Abdeckungsbericht für alle .
Codecov schlägt außerdem ein Skript vor, das Abdeckungsergebnisse sammelt: mehrere Dateien
Testabdeckung 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 Zugriff von Ihrem Terminal aus haben
Führen Sie den Testfall aus
Wenn Sie den Testfall ausführen, wird die .json-Datei erneut gespeichert. Basierend auf der Datei erhalten Sie den Code Coverage Report in der .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
Gehen Sie zum Testbericht-Tool
Alternative Methode
Go Native Test-Abdeckung
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>