Golangでコードカバレッジを測定する方法は?


回答:


138

Go 1.2(2013年第4四半期、rc1が利用可能)では、テストカバレッジの結果が表示されることに注意してください。

の主な新機能の1つgo test、個別にインストールされた新しい「go tool cover」プログラムの助けを借りて、テストカバレッジ結果を計算し、表示できるようになったことです。

このcoverツールはgo.toolsサブリポジトリの一部です。実行することでインストールできます

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

カバーツールは2つのことを行います。

  • まず、「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

Ivan Blackコメントでのように述べています

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 2013年

@FrankSheararわかりました。見やすくするために、回答にコメントを含めました。
VonC 2013年

go test -coverprofile cover.outそしてブラウザでgo tool cover -html=cover.out -o cover.html開くcover.html
Ivan Black

@IvanBlack良い点。私はより多くの可視性のために答えにそれを含めました。また、カバーされていない行をすばやく表示するために使用するエイリアスも追加しました。
VonC 2015年

1
@VonC go tool cover -html=cover.outは自動的にブラウザを開きますが、私のシステムでは機能しません。ブラウザを開いたままにしておき、必要に応じてページを更新することをお勧めします。
Ivan Black

41

Goには、テストとカバレッジのための素晴らしいツールが付属しています。すべてのGoツールは十分に文書化されていますが、Goの公式ブログのカバーストーリーの記事をgo tool cover -help読むことをお勧めします。それはたくさんの例があり、私はそれを強くお勧めします!

〜/ .bash_profileにこの関数があります。(これをターミナルに貼り付けるだけで、試すことができます)。

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

次にcd、goプロジェクト/パッケージフォルダーに移動し、と入力しcoverます。これにより、現在のパッケージの各ファイルのテスト済みコードと未テストコードを表示するビジュアルツールがブラウザーで開きます。とても便利なコマンド!まだ100%テストされていないものを見つけるために私は強くお勧めします!表示される結果はファイルごとです。左上のドロップダウンから、すべてのファイルの結果を確認できます。

このコマンドを使用すると、たとえば、パッケージのカバレッジを確認することもできます。

cover fmt

このコマンドからのターミナルの出力は次のようになります:

ok      fmt 0.031s  coverage: 91.9% of statements

それに加えて、ブラウザでは、このツールがテストでカバーされていないすべてのコード行を赤で示しています。

ここに画像の説明を入力してください

ブラウザで開く代わりに、htmlカバレッジファイルを保存することもできます。これは、テスト+カバレッジがJenkinsなどのCIツールによって実行される場合に非常に役立ちます。そうすることで、中央サーバーからカバレッジファイルを提供でき、チーム全体が各ビルドのカバレッジ結果を確認できます。


ここからコピーされたスニペットcoderwall.com/p/rh-v5a/get-coverage-of-golang-test
Pavel Nikolov

興味深いことに、私はそれをテストします。+1
VonC 2014

これはすごい!共有いただきありがとうございます。プログラムのメインパッケージをテストしたかったので、最終的にテストスクリプトに移動しました。乾杯
James O'Toole

11

上記の良い答えに加えて、私はこれらの3行がそれを取得する最も簡単な方法であることがわかります(すべてのパッケージを含みます):

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によってビルドされると思います。私はATMを確認できません。CLが保留されているため、リリースされていませんが、表示されるcovバイナリタイムスタンプは~/go/pkg/tool/linux_amd64、昨日の最後のGoビルドと一致します。
zzzz

はい、。/ all.bashを実行してください。助けてくれてありがとう、jnml!
George Atsev

x86マシンでの実行に問題があります。このスレッドで述べたようにmain.cを変更してみました:groups.google.com/group/golang-dev/browse_thread/thread/…しかし、それは別の場所で実行時エラーを生成します。64ビットマシンで試してみます。
George Atsev

3

カバーされていない行を関数で直接ターミナルで確認したい場合は、この目的のためにカバーツールを書き直しました。https://github.com/gregoryv/uncoverで入手できます

使用法

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

スクリーンショット

ここに画像の説明を入力してください



2

取材レポート→

a)すべてのテストを実行し、カバレッジを有効にします-> go test ./... -coverprofile coverage.out

b)個々の機能のカバレッジと全体的なカバレッジを取得します→ go tool cover -func coverage.out

c)カバーされている行とテストでカバーされていない行を確認します→ go tool cover -html=cover.out -o coverage.htmlcoverage.htmlブラウザで生成されたファイルを開き、詳細なカバレッジ情報を分析します。


1

すばやく簡単な方法は、組み込みのgoに付属するカバレッジツールを使用することです。

$ go test -coverprofile cp.out //ライナーのパーセンテージでカバレッジを放出します

上記のコマンドを実行した後、コードカバレッジを視覚的に確認したい場合(カバーされたステートメントやミスなど)

$ツールカバーを行きます-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イメージです。Dockerコンテナー内でテストカバレッジを実行すると、プロジェクトのテストカバレッジ結果を含む.coverフォルダーが作成さます。

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

テスト・カバレッジ・スクリプトは、すべてのプロジェクトで実行されているのフォルダを生成、内部.coverフォルダの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

テストケースが完了したら、.jsonを使用して.htmlファイルにレポートを生成します。

gocov-html your_Coverage_report.json >your_Coverage_report.html

参照

go lang用のGoTestカバレッジツール

Go Go Reportレポートツール

別の方法

ネイティブテストカバレッジに移動

go test -coverprofile=coverage.out
go tool cover -html=coverage.out
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.