Вопрос по – Как измерить покрытие кода в Голанге?

69

Кому-нибудь удалось создать покрытие кода для модульных тестов Go? Я не могу найти инструмент для этого в Интернете.

Ваш Ответ

9   ответов
27

отя все инструменты Go хорошо документированыgo tool cover -help Я бы предложил почитатьОбложка статьи на официальном блоге Go, Здесь много примеров, и я настоятельно рекомендую это!

У меня есть эта функция в моем ~ / .bash_profile. (Вы можете просто вставить его в терминал, чтобы попробовать).

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

Тогда простоcd в папку go project / package и введитеcover. This opens a visual tool in browser which shows you the tested and untested code for each file in the current package. Very useful command! I strongly recommend it for finding what is not 100% tested yet! The shown results are per file. From a drop down in top-left you can see results for all files.

С помощью этой команды вы также можете проверить покрытие любого пакета, например:

cover fmt

Выход в терминал из этой команды будет:

ok      fmt 0.031s  coverage: 91.9% of statements

В дополнение к этому в вашем браузере вы увидите, что этот инструмент показывает красным цветом все строки кода, которые не покрыты тестами:

enter image description here

Также можно просто сохранить файл покрытия html вместо того, чтобы открывать его в браузере. Это очень полезно в тех случаях, когда ваши тесты + покрытие выполняется инструментом CI, таким как Jenkins. Таким образом, вы можете обслуживать файлы покрытия с центрального сервера, и вся команда сможет видеть результаты покрытия для каждой сборки.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededcoderwall.com/p/rh-v5a/get-coverage-of-golang-test
Error: User Rate Limit Exceeded
2

просто запустите:

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

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

Убедитесь, что он установлен правильно, и у вас есть доступ с вашего терминала

Run the Test Case

Если вы запустите тестовый пример, он перечитает файл .json на основе файла, вы получите отчет о покрытии кода в файле .html.

gocov test >your_Coverage_report.json

После завершения теста создайте отчет в файле .html, используя файл .json.

gocov-html your_Coverage_report.json >your_Coverage_report.html

Ссылка

GoTest Coverage Tool для Go Lang

Go Test Report Tool

Alternate Method

Go Native Test coverage

go test -coverprofile=coverage.out
go tool cover -html=coverage.out
2

я считаю, что эти три строки - самый простой способ получить его (который включает в себя все пакеты):

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

Обратите внимание, что в файле HTML вы найдете раскрывающуюся кнопку, которая направит вас ко всем файлам.

5

Вотнекоторые документыВот.

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

Я этим не пользовался, это все, что я знаю.

Error: User Rate Limit Exceeded George Atsev
Error: User Rate Limit Exceeded~/go/pkg/tool/linux_amd64Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgroups.google.com/group/golang-dev/browse_thread/thread/…Error: User Rate Limit Exceeded George Atsev
Error: User Rate Limit Exceeded
84

Go 1.2 (4 квартал 2013 г., rc1 доступен) теперь будет отображатьсярезультаты тестового покрытия:

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.

Фрэнк Шиарар упоминает:

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

Иван Блэк упоминаетв комментариях:

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

Я даже не хочу ждать, пока откроется браузер, поэтому я определил этот псевдоним:

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

Что я просто набираюgcи иметь список всех строкnot еще покрыты (здесь: сcoverage.out линияnot заканчивая & quot;1& Quot;).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgo tool cover -html=cover.outError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
go test -coverprofile cover.outError: User Rate Limit Exceededgo tool cover -html=cover.out -o cover.htmlError: User Rate Limit Exceededcover.htmlError: User Rate Limit Exceeded
Error: User Rate Limit Exceededgo test -coverprofile <filename> <package name>
1

Гея-грузчик / база-гоу-сборка Docker Image.

Это изображение Docker, которое содержит все необходимое для построения и тестирования покрытия. Запуск тестового покрытия внутри контейнера Docker создает.cover папка с результатами тестового покрытия вашего проекта.

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

тестовый сценарий покрытия работает на всех проектах & apos; папки и генерирует, внутри.cover отчеты о совместимости папок и покрытия для каждой папки, а также объединенный отчет о покрытии всех проектов & apos; тесты.

Кодеков также предлагает скрипт, который собирает результаты покрытия:несколько файлов

1

который поставляется со встроенным Go:

$ go test -coverprofile cp.out // Emits the coverage in one liner percentage wise

После выполнения вышеуказанной команды, если вы хотите визуально увидеть покрытие кода (например, покрытые операторы, пропущенные и т. Д.)

$ go tool cover -html=cp.out

Примечание: вам нужно выполнить вышеуказанные команды в папке, где вы хотите увидеть покрытие

3

в терминале, я переписал инструмент для этой цели. Он доступен наhttps://github.com/gregoryv/uncover.

Usage

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

Screenshot

enter image description here

Похожие вопросы