गोलंग में कोड कवरेज कैसे मापें?


113

क्या किसी को गो यूनिट परीक्षणों के लिए कोड कवरेज तैयार करने में सफलता मिली है? मुझे वेब पर इसके लिए कोई टूल नहीं मिल रहा है।

जवाबों:


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" के साथ लागू किया गया है , फिर विश्लेषण कर सकता है।

फ्रैंक शियरार का उल्लेख है :

गो (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
ध्यान दें कि गो के नवीनतम संस्करण (2013/09/19) का उपयोगgo test -coverprofile <filename> <package name>
फ्रैंक

@FrankShearar ठीक है। अधिक दृश्यता के उत्तर में मैंने आपकी टिप्पणी को शामिल किया है।
वॉन

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 tool cover -helpमैं आधिकारिक गो ब्लॉग पर कवर स्टोरी लेख को पढ़ने का सुझाव दूंगा । इसके बहुत सारे उदाहरण हैं और मैं दृढ़ता से इसकी सिफारिश करता हूं!

मेरे पास यह फ़ंक्शन मेरे ~ / .bash_profile में है। (आप इसे कोशिश करने के लिए टर्मिनल में पेस्ट कर सकते हैं)।

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

तो बस cdएक गो परियोजना / पैकेज फ़ोल्डर और प्रकार में cover। यह ब्राउज़र में एक दृश्य उपकरण खोलता है जो आपको वर्तमान पैकेज में प्रत्येक फ़ाइल के लिए परीक्षण किए गए और अप्रयुक्त कोड दिखाता है। बहुत उपयोगी कमांड! मैं इसे खोजने के लिए दृढ़ता से अनुशंसा करता हूं कि अभी तक 100% परीक्षण नहीं किया गया है! दिखाए गए परिणाम प्रति फ़ाइल हैं। शीर्ष-बाएँ में एक ड्रॉप डाउन से आप सभी फ़ाइलों के लिए परिणाम देख सकते हैं।

इस कमांड से आप उदाहरण के लिए किसी भी पैकेज के कवरेज की जांच कर सकते हैं:

cover fmt

इस कमांड से टर्मिनल में आउटपुट होगा:

ok      fmt 0.031s  coverage: 91.9% of statements

आपके ब्राउज़र में इसके अलावा आपको यह उपकरण कोड की सभी लाइनों को लाल रंग में दिखाएगा जो कि परीक्षणों से ढके नहीं हैं:

यहां छवि विवरण दर्ज करें

केवल ब्राउज़र में खोलने के बजाय html कवरेज फ़ाइल को सहेजना भी संभव है। यह उन मामलों में बहुत उपयोगी है जब आपके परीक्षण + कवरेज जेन उपकरण जैसे जेन टूल द्वारा चलाया जाता है। इस तरह आप एक केंद्रीय सर्वर से कवरेज फ़ाइलों की सेवा कर सकते हैं और पूरी टीम प्रत्येक बिल्ड के लिए कवरेज परिणाम देख पाएगी।


स्निपेट की प्रतिलिपि यहाँ से कोडरवॉल
पावेल निकोलोव

दिलचस्प है, मैं इसका परीक्षण करूंगा। +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
$

मैंने इसका उपयोग नहीं किया है, यह सब मुझे पता है।


क्या आपको इसे मैन्युअल रूप से स्थापित करना है? मेरे स्थानीय गो इंस्टॉलेशन (गो संस्करण go1) में यह नहीं है।
oers

मेरा मानना ​​है कि इससे निर्माण होता है ।/all.bash मैं एटीएम को सत्यापित नहीं कर सकता, मैं रिलीज नहीं कर रहा हूं क्योंकि मेरे पास एक सीएल लंबित है, लेकिन मैं ~/go/pkg/tool/linux_amd64अपने पिछले गो बिल्ड से मेल खाता हुआ कोव बाइनरी टाइम स्टैम्प देखता हूं।
zzzz

हां, भागो ।/all.bash और आपके पास यह होगा। मदद के लिए धन्यवाद, jnml!
जॉर्ज एटसेव

मुझे अपनी x86 मशीन पर इसे चलाने में कुछ समस्याएं हैं। मैंने इस सूत्र में बताए अनुसार main.c बदलने की कोशिश की: group.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

बी) व्यक्तिगत कार्यों के साथ-साथ समग्र कवरेज के लिए कवरेज प्राप्त करें → go tool cover -func coverage.out

ग) कवर की गई रेखाएँ और जो आपके परीक्षणों द्वारा कवर नहीं की गई हैं → देखें go tool cover -html=cover.out -o coverage.htmlcoverage.htmlब्राउज़र में उत्पन्न फ़ाइल को खोलें और विस्तृत कवरेज जानकारी का विश्लेषण करें।


1

एक त्वरित और आसान तरीका कवरेज टूल का उपयोग करना है जो अंतर्निहित गो के साथ आता है:

$ go परीक्षण-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 का उपयोग करने का प्रयास करें ।

यह एक डॉकर छवि है जिसमें कवरेज बनाने और परीक्षण करने के लिए आपको सभी की आवश्यकता होती है। डॉकर कंटेनर के अंदर परीक्षण कवरेज चलाना आपके प्रोजेक्ट के परीक्षण कवरेज परिणामों के साथ .cover फ़ोल्डर बनाता है ।

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

परीक्षण कवरेज स्क्रिप्ट सभी परियोजनाओं पर चल रहा है 'फोल्डर और उत्पन्न करता है, अंदर .cover प्रत्येक फ़ोल्डर के लिए JUnit और कवरेज रिपोर्ट फ़ोल्डर, और एक सभी परियोजनाओं की कवरेज रिपोर्ट गठबंधन' परीक्षण।

कोडेकोव एक स्क्रिप्ट भी सुझाता है जो कवरेज परिणाम एकत्र करता है: कई फाइलें


-1

गोलंग के लिए टेस्ट कवरेज

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

यह सही ढंग से स्थापित है की जाँच करें और आप अपने टर्मिनल से उपयोग किया है

टेस्ट केस चलाएं

यदि आप टेस्ट केस चलाते हैं तो यह .json फाइल को Reder करेगा। फाइल के आधार पर आपको .html फाइल में कोड कवरेज रिपोर्ट मिलेगी।

gocov test >your_Coverage_report.json

एक बार जब आपका टेस्ट केस हो जाता है तो .json का उपयोग करके .html फ़ाइल में एक रिपोर्ट जेनरेट करें

gocov-html your_Coverage_report.json >your_Coverage_report.html

संदर्भ

गो लैंग के लिए GoTest कवरेज टूल

टेस्ट रिपोर्ट टूल पर जाएं

वैकल्पिक विधि

देशी परीक्षण कवरेज जाओ

go test -coverprofile=coverage.out
go tool cover -html=coverage.out
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.