Golang'da kod kapsamı nasıl ölçülür?


Yanıtlar:


139

O Not Go 1.2 (Q4 2013 rc1 mevcut) şimdi gösterecektir test kapsamı sonuçları :

Bir büyük yeni özellik go testolduğunu şimdi yeni, ayrı ayrı "yüklü yardımıyla, hesaplamak ve olabilir go tool cover" programı, ekran testi kapsama sonuçları .

coverAracı bir parçasıdır go.toolssubrepository . Çalıştırılarak kurulabilir

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

Kapak aracı iki şey yapar.

  • İlk olarak, " go test" -coverbayrağı verildiğinde , paket için kaynağı yeniden yazmak ve enstrümantasyon ifadelerini eklemek için otomatik olarak çalıştırılır. Test daha sonra derlenir ve her zamanki gibi çalıştırılır ve temel kapsam istatistikleri raporlanır:
$ go test -coverprofile fmtcoverage.html fmt
ok      fmt 0.060s  coverage: 91.4% of statements
$

İkinci olarak, daha ayrıntılı raporlar için, "teste git" için farklı bayraklar, "" ile çağrılan kapak programının go tool coverdaha sonra analiz edebileceği bir kapsam profili dosyası oluşturabilir .

Frank Shearar şunları söylüyor :

Go'nun (2013/09/19) en son sürümleri şunları kullanır:

go test -coverprofile <filename> <package name>

Kapsam istatistiklerinin nasıl oluşturulacağı ve analiz edileceğine ilişkin ayrıntılar, komutlar çalıştırılarak bulunabilir.

$ go help testflag
$ go tool cover -help

Ivan Black yorumlarda şöyle diyor :

go test -coverprofile cover.outve ardından varsayılan tarayıcınızda
go tool cover -html=cover.outaçılırcover.out

Tarayıcının açılmasını beklemek bile istemiyorum, bu yüzden bu takma adı tanımladım:

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

Ben sadece yazın gcve tüm çizgilerin bir listesi var değil henüz kaplı (burada: bir ile coverage.outçizgi değil "ile biten 1").


2
Go'nun (2013/09/19) en son sürümlerindego test -coverprofile <filename> <package name>
Frank Shearar

@FrankShearar Tamam. Daha fazla görünürlük için yorumunuzu cevaba ekledim.
VonC

go test -coverprofile cover.outve sonra tarayıcıda go tool cover -html=cover.out -o cover.htmlaçıncover.html
Ivan Black

@IvanBlack iyi nokta. Daha fazla görünürlük için cevaba ekledim. Kapsanmayan satırları hızlıca görmek için kullandığım bir takma ad da ekledim.
VonC

1
@VonC go tool cover -html=cover.outotomatik olarak bir tarayıcı açar, ancak sistemim için çalışmaz. Bir tarayıcıyı açık tutmayı ve gerekirse sayfayı yenilemeyi tercih ederim.
Ivan Black

41

Go, test etme ve kapsam için harika bir araçla birlikte gelir. Tüm Go araçları iyi bir şekilde belgelenmiş go tool cover -helpolsa da, resmi Go blogundaki kapak hikayesi makalesini okumanızı öneririm . Bol örnekleri var ve kesinlikle tavsiye ederim!

Bu işlevi ~ / .bash_profile dosyamda kullanıyorum. (denemek için terminale yapıştırmanız yeterlidir).

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

Sonra cdbir go proje / paket klasörüne girin ve yazın cover. Bu, tarayıcıda size geçerli paketteki her dosya için test edilmiş ve test edilmemiş kodu gösteren görsel bir araç açar. Çok kullanışlı komut! Henüz% 100 test edilmemiş olanı bulmanız için şiddetle tavsiye ederim! Gösterilen sonuçlar dosya başınadır. Sol üstteki açılır menüden tüm dosyalar için sonuçları görebilirsiniz.

Bu komutla herhangi bir paketin kapsamını da kontrol edebilirsiniz, örneğin:

cover fmt

Bu komutun terminaldeki çıkışı şöyle olacaktır:

ok      fmt 0.031s  coverage: 91.9% of statements

Buna ek olarak, tarayıcınızda bu aracın, testlerle kapsanmayan tüm kod satırlarını kırmızıyla gösterdiğini göreceksiniz:

görüntü açıklamasını buraya girin

Ayrıca html kapsama dosyasını bir tarayıcıda açmak yerine kaydetmek de mümkündür. Bu, testleriniz + kapsamınızın Jenkins gibi CI aracı tarafından çalıştırıldığı durumlarda çok kullanışlıdır. Bu şekilde, kapsama dosyalarını merkezi bir sunucudan sunabilirsiniz ve tüm ekip, her derleme için kapsam sonuçlarını görebilir.



İlginç, test edeceğim. +1
VonC

Bu harika! Paylaşım için teşekkürler. Programımdaki bir ana paketi test etmek istediğim için bir test komut dosyasına geçmeyi bıraktım. Şerefe
James O'Toole

11

Yukarıdaki iyi cevaplara ek olarak, bu üç satırı elde etmenin en basit yolu olarak görüyorum (tüm paketleri içerir):

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

HTML dosyasında sizi tüm dosyalara yönlendirecek bir açılır düğme bulacağınızı unutmayın.


5

Bu doğru burada bazı dokümanlar, burada .

$ 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
$

Kullanmadım, tüm bildiğim bu.


manuel olarak kurmanız gerekiyor mu? yerel go kurulumumda (go1 go1 sürümü) orada değil.
oers

./All.bash tarafından oluşturulacağına inanıyorum. ATM'yi doğrulayamıyorum, bekleyen bir CL'm olduğu için piyasaya sürülmüyorum, ancak gördüğüm cov ikili zaman damgası ~/go/pkg/tool/linux_amd64, dünkü son Go yapımla eşleşiyor.
zzzz

Evet, ./all.bash çalıştırın ve ona sahip olacaksınız. Yardım için teşekkürler, jnml!
George Atsev

X86 makinemde çalıştırırken bazı sorunlar yaşıyorum. Main.c'yi bu başlıkta belirtildiği gibi değiştirmeyi denedim: groups.google.com/group/golang-dev/browse_thread/thread/… Ancak başka bir konumda çalışma zamanı hatası oluşturuyor. 64 bitlik bir makinede deneyeceğim.
George Atsev 9'12

3

Açığa çıkarılan satırları işlevlerine göre doğrudan bir terminalde görmek isterseniz, bu amaçla kapak aracını yeniden yazdım. Https://github.com/gregoryv/uncover adresinde mevcuttur .

kullanım

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

Ekran görüntüsü

görüntü açıklamasını buraya girin



2

Kapsam Raporu →

a) Tüm testleri çalıştırın ve kapsamı etkinleştirin -> go test ./... -coverprofile coverage.out

b) Bireysel işlevler ve genel kapsam için kapsam alın → go tool cover -func coverage.out

c) Kapsanan ve testlerinizin kapsamadığı satırları görün → go tool cover -html=cover.out -o coverage.html. coverage.htmlTarayıcıda burada oluşturulan dosyayı açın ve ayrıntılı kapsam bilgilerini analiz edin.


1

Hızlı ve kolay bir yol, yerleşik hareketle birlikte gelen kapsama aracını kullanmaktır:

$ go test -coverprofile cp.out // Kapsamı yüzde olarak tek satırda yayar

Yukarıdaki komutu uyguladıktan sonra, kod kapsamını görsel olarak görmek isterseniz (kapsanan ifadeler ve cevapsız vb.)

$ go araç kapağı -html = cp.out

Not: Kapsamı görmek istediğiniz klasörde yukarıdaki komutları uygulamanız gerekir.


1

Yardım menülerinden ve bu soruya verilen diğer yanıtlardan ilham alarak şunu çalıştırın:

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

0

Gaia-docker / base-go-build Docker Image kullanmayı deneyin .

Bu, kapsamı oluşturmak ve test etmek için ihtiyacınız olan her şeyi içeren bir Docker görüntüsüdür. Bir Docker kapsayıcısı içinde test kapsamı çalıştırmak, projenizin test kapsamı sonuçlarını içeren .cover klasörü oluşturur .

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

Test kapsamı komut tüm projeler üzerinde çalışan klasör ve içinde üretir üstü örtülmelidir her klasör için JUnit ve kapsama raporları klasör ve bir bütün projelerin kapsamı raporunu birleştirmek testlerinin.

Codecov, kapsam sonuçlarını toplayan bir komut dosyası da önerir: birden çok dosya


-1

Golang için Test Kapsamı

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

Doğru Kurulduğunu Kontrol Edin ve Terminalinizden Erişiminiz Var

Test Durumunu Çalıştırın

Test senaryosunu çalıştırırsanız, .json Dosyasını Yeniden Düzenleyecektir Dosyaya bağlı olarak Kod Kapsamı Raporunu .html dosyasında alacaksınız.

gocov test >your_Coverage_report.json

Test olayınız tamamlandığında .html Dosyasında .json kullanarak bir Rapor Oluşturun

gocov-html your_Coverage_report.json >your_Coverage_report.html

Referans

Go lang için GoTest Kapsama Aracı

Test Rapor Aracına Git

Alternatif Yöntem

Yerel Test kapsamına gidin

go test -coverprofile=coverage.out
go tool cover -html=coverage.out
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.