Як виміряти покриття коду в Golang?


Відповіді:


138

Зауважте, що Go 1.2 (Q4 2013, доступний rc1) тепер відображатиме результати тестового покриття :

Однією з головних особливостей програми go testє те, що тепер вона може обчислювати і за допомогою нової, окремо встановленої go tool coverпрограми, " " відображати результати тестового покриття .

coverІнструмент є частиною go.toolssubrepository . Його можна встановити, запустивши

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

Інструмент обкладинки робить дві речі.

  • По-перше, коли " go test" надано -coverпрапор, він запускається автоматично, щоб переписати джерело для пакета та вставити заяви про прилади. Потім тест складається і запускається, як зазвичай, і подаються основні статистичні дані щодо покриття:
$ go test -coverprofile fmtcoverage.html fmt
ok      fmt 0.060s  coverage: 91.4% of statements
$

По-друге, для більш детальних звітів різні прапори для "тестування" можуть створити файл профілю покриття, який програма обкладинки, на яку посилається " go tool cover", може потім проаналізувати.

Френк Ширар згадує :

В останніх версіях Go (2013/09/19) використовується:

go test -coverprofile <filename> <package name>

Докладніше про те, як генерувати та аналізувати статистику покриття, можна знайти, запустивши команди

$ go help testflag
$ go tool cover -help

Іван Чорний згадує у коментарях :

go test -coverprofile cover.outа потім
go tool cover -html=cover.outвідкриється cover.outу вашому браузері за замовчуванням

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

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

Я просто набираю gcі маю список усіх рядків, які ще не охоплені (тут: coverage.outрядок, що не закінчується на " 1").


2
Зауважте, що використовуються останні версії Go (2013/09/19)go test -coverprofile <filename> <package name>
Frank Shearar

@FrankShearar Добре. Я включив ваш коментар у відповідь для більшої наочності.
VonC

go test -coverprofile cover.outа потім go tool cover -html=cover.out -o cover.htmlвідкрити cover.htmlв браузері
Іван Чорний

@IvanBlack хороший момент. Я включив його у відповідь для більшої наочності. Я також додав псевдонім, який використовую для швидкого перегляду незакритих ліній.
VonC

1
@VonC go tool cover -html=cover.outавтоматично відкриє браузер, але це не працює для моєї системи. Я вважаю за краще тримати браузер відкритим і оновити сторінку, якщо це необхідно.
Іван Чорний

41

Go постачається з чудовим інструментом для тестування та покриття. Хоча всі інструменти Go добре задокументовані, go tool cover -helpя б запропонував прочитати статтю з обкладинки на офіційному блозі Go . У ній є маса прикладів, і я настійно рекомендую!

Ця функція у мене в моєму ~ / .bash_profile. (ви можете просто вставити його в термінал, щоб спробувати).

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

Потім просто cdв папку go / project / pack і введіть cover. Це відкриває візуальний інструмент у браузері, який показує вам перевірений і неперевірений код для кожного файлу в поточному пакеті. Дуже корисна команда! Я настійно рекомендую це знайти те, що ще не перевірено на 100%! Показані результати по файлу. Зі спадного меню вгорі ліворуч ви бачите результати для всіх файлів.

За допомогою цієї команди ви також можете перевірити покриття будь-якого пакета, наприклад:

cover fmt

Вихід у терміналі з цієї команди буде:

ok      fmt 0.031s  coverage: 91.9% of statements

На додаток до цього у вашому браузері ви побачите, що цей інструмент червоним кольором показує всі рядки коду, які не покриті тестами:

введіть тут опис зображення

Можна також просто зберегти файл покриття html, а не відкривати його у браузері. Це дуже корисно в тих випадках, коли ваші тести + охоплення виконуються інструментом CI на зразок Дженкінса. Таким чином ви можете обслуговувати файли покриття з центрального сервера, і вся команда зможе побачити результати покриття для кожної збірки.



Цікаво, я це протестую. +1
VonC

Це круто! Дякую, що поділились. Закінчився переходом до тестового сценарію, коли я хотів протестувати основний пакет у своїй програмі. Ура
Джеймс О'Тул,

11

Окрім гарних відповідей, наведених вище, я вважаю, що ці три рядки є найпростішим способом їх отримання (який включає всі пакунки):

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
$

Я не користувався цим, це все, що я знаю.


чи потрібно це встановити вручну? у моїй локальній установці go (go версія go1) її немає.
oers

Я вважаю, що це створюється ./all.bash. Я не можу перевірити банкомат, я не звільнений, оскільки у мене очікує отримання CL, але двоякий часовий штамп cov, який я бачу в ~/go/pkg/tool/linux_amd64матчах моєї останньої збірки Go вчора.
zzzz

Так, запустіть ./all.bash і у вас це буде. Дякую за допомогу, jnml!
Георгій Ацев

У мене є проблеми з його запуском на моїй машині x86. Я спробував змінити main.c, як згадується в цій темі: groups.google.com/group/golang-dev/browse_thread/thread/… Але це генерує помилку виконання в іншому місці. Я спробую це на 64-бітній машині.
Георгій Ацев

3

Якщо ви хочете бачити непокриті лінії за функцією безпосередньо в терміналі, я переписав інструмент обкладинки для цієї мети. Доступний за адресою https://github.com/gregoryv/uncover .

Використання

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

Знімок екрана

введіть тут опис зображення


2

Якщо ви використовуєте VSCode, ця функція підтримується у вікні ( але відключена за замовчуванням )

Просто увімкніть тест із збереження + звітування про покриття

https://github.com/microsoft/vscode-go/wiki/On-Save-features

Він навіть покаже у вашому редакторі, які рядки не охоплені, що дуже зручно.


2

Звіт про покриття →

a) Виконати всі тести та включити охоплення -> go test ./... -coverprofile coverage.out

b) Отримайте покриття окремих функцій, а також загальне покриття → go tool cover -func coverage.out

c) Дивіться покриті рядки та ті, які не охоплені вашими тестами → go tool cover -html=cover.out -o coverage.html. Відкрийте coverage.htmlстворений у браузері файл і проаналізуйте детальну інформацію про покриття.


1

Швидкий і простий спосіб - використовувати інструмент покриття, який постачається із вбудованим ходом:

$ go test -coverprofile cp.out // Емітує покриття в одному відсотку вкладиша

Після виконання вищевказаної команди, якщо ви бажаєте візуально побачити покриття коду (як-от викладені заяви та пропущені тощо)

$ go tool cover -html = cp.out

Примітка. Потрібно виконати вищезазначені команди в папці, де ви хочете бачити покриття


1

Надихнувшись довідковими меню та іншими відповідями на це питання, просто запустіть:

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.

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

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

Сценарій тестового покриття , що працює на всі проекти папку і створює усередині .Накрить папки JUnit і покриття звітів для кожної папки, і комбайна звіту охоплення всіх проектів випробувань.

Codecov також пропонує сценарій, який збирає результати покриття: кілька файлів


-1

Тестове покриття для Golang

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

Перевірте, чи правильно встановлено, і ви маєте доступ зі свого терміналу

Запустіть тестовий випадок

Якщо ви запустите тестовий випадок, він переробить файл .json На основі файлу ви отримаєте звіт про покриття коду у файлі .html

gocov test >your_Coverage_report.json

Після завершення тестового випадку Створіть звіт у файлі .html за допомогою .json

gocov-html your_Coverage_report.json >your_Coverage_report.html

Довідково

Інструмент покриття GoTest для переходу

Перейдіть на інструмент звіту про випробування

Альтернативний метод

Перейдіть на покриття Native Test

go test -coverprofile=coverage.out
go tool cover -html=coverage.out
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.