2012-05-09 42 views

Trả lời

60

Lưu ý rằng Go 1.2 (Q4 2013, rc1 is available) bây giờ sẽ hiển thị test coverage results:

One major new feature of go test is that it can now compute and, with help from a new, separately installed " go tool cover " program, display test coverage results.

The cover tool is part of the go.tools subrepository . It can be installed by running

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

The cover tool does two things.

  • First, when " go test " is given the -cover flag, it is run automatically to rewrite the source for the package and insert instrumentation statements. The test is then compiled and run as usual, and basic coverage statistics are reported:
$ go test -coverprofile fmt 
ok  fmt 0.060s coverage: 91.4% of statements 
$ 

Second, for more detailed reports, different flags to "go test" can create a coverage profile file, which the cover program, invoked with " go tool cover ", can then analyze.

Frank Sheararmentions:

The latest versions of Go (2013/09/19) use:

go test -coverprofile <filename> <package name> 

Details on how to generate and analyze coverage statistics can be found by running the commands

$ go help testflag 
$ go tool cover -help 

Ivan Black đề cập in the comments:

go test -coverprofile cover.out and then
go tool cover -html=cover.out -o cover.html opens cover.html in browser

Tôi thậm chí không muốn chờ cho trình duyệt để mở, vì vậy tôi định nghĩa bí danh này:

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

đó tôi chỉ cần gõ gc, và có một danh sách của tất cả các dòng không chưa được điều chỉnh (ở đây: với một dòng coverage.outkhông kết thúc bằng "1").

+0

Lưu ý rằng phiên bản mới nhất của Go (2013/09/19) sử dụng 'go test -coverprofile ' –

+0

@FrankShearar Ok. Tôi đã bao gồm bình luận của bạn trong câu trả lời cho khả năng hiển thị nhiều hơn. – VonC

+0

'go test -coverprofile cover.out' và sau đó' go tool cover -html = cover.out -o cover.html' mở 'cover.html' trong trình duyệt –

5

Đúng ngay here, một số tài liệu here.

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

Tôi chưa từng sử dụng, đây là tất cả những gì tôi biết.

+0

bạn có phải cài đặt thủ công không? trong quá trình cài đặt đi cục bộ của tôi (đi phiên bản go1) nó không có ở đó. – oers

+0

Tôi tin rằng nó được xây dựng bởi ./all.bash. Tôi không thể xác minh ATM, tôi không được phát hành vì tôi có CL đang chờ xử lý, nhưng tem thời gian nhị phân cov mà tôi thấy trong '~/go/pkg/tool/linux_amd64' khớp với phiên bản Go cuối cùng của ngày hôm qua. – zzzz

+0

Có, hãy chạy ./all.bash và bạn sẽ có nó. Cảm ơn sự giúp đỡ, jnml! –

18

Đi kèm với công cụ tuyệt vời để kiểm tra và bảo hiểm. Mặc dù tất cả các công cụ Go đều được ghi thành tài liệu go tool cover -help Tôi khuyên bạn nên đọc The cover story article on the official Go blog. Nó có rất nhiều ví dụ và tôi khuyên bạn nên sử dụng nó!

Tôi có hàm này trong ~/.bash_profile của mình. (bạn có thể chỉ cần dán nó trong thiết bị đầu cuối để cho nó một thử).

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

Sau đó chỉ cần cd vào một dự án đi thư mục/gói và gõ cover. Thao tác này sẽ mở ra một công cụ trực quan trong trình duyệt hiển thị cho bạn mã được kiểm tra và chưa được kiểm tra cho mỗi tệp trong gói hiện tại. Lệnh rất hữu ích! Tôi khuyên bạn nên tìm kiếm những gì chưa được kiểm tra 100%! Các kết quả được hiển thị cho mỗi tệp. Từ menu thả xuống ở trên cùng bên trái, bạn có thể xem kết quả cho tất cả các tệp.

Với lệnh này, bạn cũng có thể kiểm tra độ che phủ của bất kỳ gói ví dụ:

cover fmt

Sản lượng trong thiết bị đầu cuối từ lệnh này sẽ là:

ok  fmt 0.031s coverage: 91.9% of statements 

Bên cạnh đó trong trình duyệt của bạn, bạn sẽ thấy công cụ này hiển thị bằng tất cả các dòng mã màu đỏ không được kiểm tra:

enter image description here

Cũng có thể chỉ lưu tệp tin bảo hiểm html thay vì mở tệp trong trình duyệt. Điều này rất hữu ích trong các trường hợp khi kiểm thử của bạn + vùng phủ sóng được chạy bởi công cụ CI như Jenkins. Bằng cách đó bạn có thể phục vụ các tập tin bảo hiểm từ một máy chủ trung tâm và toàn bộ nhóm sẽ có thể xem kết quả bảo hiểm cho mỗi bản dựng.

+0

Đoạn mã được sao chép từ đây https://coderwall.com/p/rh-v5a/get-coverage-of-golang-test –

+0

Thú vị, tôi sẽ kiểm tra nó. +1 – VonC

+0

Điều này thật tuyệt vời! Cám ơn vì đã chia sẻ. Đã kết thúc việc chuyển sang tập lệnh thử nghiệm vì tôi muốn thử nghiệm gói chính trong chương trình của mình. Chúc mừng –

2

Lấy cảm hứng từ menu trợ giúp và câu trả lời khác cho câu hỏi này, chỉ cần chạy:

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

Cố gắng sử dụng gaia-docker/base-go-build Docker ảnh.

Đây là hình ảnh Docker chứa tất cả những gì bạn cần để xây dựng và kiểm tra mức độ phù hợp. Chạy phạm vi kiểm tra bên trong vùng chứa Docker tạo .cover thư mục có kết quả kiểm tra dự án của bạn.

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

Các test coverage script chạy trên tất cả các dự án thư mục và tạo ra, bên trong .cover thư mục báo cáo bảo hiểm cho mỗi thư mục junit và, và một báo cáo bảo hiểm kết hợp của tất cả các dự án thử nghiệm.

1

Test Coverage for Golang

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

Kiểm tra Nó được cài đặt đúng và bạn có thể truy cập từ ga

Run the Test Case

bạn Nếu bạn chạy các trường hợp thử nghiệm nó sẽ Reder File .json Dựa trên các tập tin bạn sẽ nhận Báo cáo Phạm vi Mã trong tệp .html

gocov test >your_Coverage_report.json

Khi trường hợp Kiểm tra của bạn được thực hiện, hãy tạo Báo cáo bằng .html.json

gocov-html your_Coverage_report.json >your_Coverage_report.html

Reference

GoTest Coverage Tool for go lang

Go Test Report Tool

bảo hiểm

Alternate Method

Go Native thử nghiệm

go test -coverprofile=coverage.out 
go tool cover -html=coverage.out 
Các vấn đề liên quan