2013-10-16 17 views
5

मैं सफलतापूर्वक ग्राडल आधारित बिल्ड चलाने के बाद जैकोको द्वारा "बिल्ड/जैकोको" फ़ोल्डर में 2 .exec फ़ाइलों को उत्पन्न कर रहा हूं। एकीकरण परीक्षण।सोनारक्यूब - एकीकरण टेस्ट.एक्सईसी - सोनाररुनर (ग्रैडल) या "सोनार रनर" कमांड - 0.0% covereage दिखा रहा है

Gradle आदेश: "Gradle स्वच्छ निर्माण integrationTest"

करने के बाद, यह निर्माण/jacoco फ़ोल्डर के अंतर्गत निम्नलिखित .exec फ़ाइलें उत्पन्न करता है।

  1. test.exec
  2. integrationTest.exec

के बाद मेरी sonar-project.properties फ़ाइल है। जब, मैं लिनक्स प्रॉम्प्ट से "सोनार-धावक" चलाता हूं, लेकिन यह इस परियोजना के लिए सोनारक्यूब डैशबोर्ड पर पूरा होता है, मुझे लगता है कि यूनिट टेस्ट में कुछ 34.5% कहते हैं लेकिन एकीकरण परीक्षण 0.0% कहते हैं। दोनों .exec फ़ाइलों के पास वैध आकार है। मैंने .exec फ़ाइलों पर "बिल्ली" भी किया और आउटपुट को लिनक्स में "स्ट्रिंग्स" कमांड पर पाइप किया और देखा कि एकीकरण टेस्ट.एक्सईसी ने टेस्ट फ़ंक्शंस को मारा - मेरे पास केवल 1 .java फ़ाइल है।

जब मैं "Gradle स्वच्छ निर्माण integrationTest sonarRunner -Dxxx.xxx = yyy -Dyyy.xx = zzz" सभी सोनार चर-डी विकल्प का उपयोग sonar-project.properties फ़ाइल में उल्लिखित गुजर तक यानी चलाने के लिए, यह काम करता है लेकिन सोनारक्यूब प्रोजेक्ट के डैशबोर्ड पर एक ही परिणाम। प्रोजेक्ट के सोनार डैशबोर्ड में यूनिट/इंटीग्रेशन टेस्ट के लिए दोनों विजेट्स कॉन्फ़िगर किए गए हैं और मैं समग्र कवरेज दिखाने के लिए आईटी परीक्षण भी शामिल कर रहा हूं। कुल मिलाकर कवरेज 34.5% दिखा रहा है (जो यूनिट टेस्ट% मान है)। सोनार test.exec, integrationTest.exec देखता है और ऑटो भी इस ऑपरेशन के दौरान समग्र-xxx.exec फ़ाइल उत्पन्न करता है।

नोट: मुझे कोई जहाँ हूँ - एक अलग पोटीन/लिनक्स कंसोल पर -OR Gradle भीतर स्क्रिप्ट का निर्माण बिल्ला शुरू कर किसी भी मूल्य प्रदान करने या Jacoco के लिए जावा एजेंट सेट करते समय। मुझे एकीकरण Test.exec फ़ाइल और test.exec फ़ाइल मिल रही है, इसलिए पहले से ही यह सुनिश्चित नहीं है कि आईटी परीक्षण पूर्ण होने के बाद JVM को रोकना आवश्यक है या नहीं। मुझे नहीं लगता कि मुझे उन लोगों की आवश्यकता है क्योंकि मेरे पास .exec फ़ाइलों के लिए वैध फ़ाइल आकार है।

मेरे: - क्यों सोनार नहीं डैशबोर्ड भले ही मैंने सेट कर रहा हूं/निम्न चर सही ढंग से गुजर पर आईटी कवरेज हो रही है:

sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec 

-bash-3.2 $ बिल्ली sonar- project.properties

# Root project information 
sonar.projectKey=com:company:product:ProjectA 
sonar.projectName=ProjectA 
sonar.projectVersion=1.0 
# optional description 
sonar.projectDescription=ProjectA Service 

#Tells SonarQube that the code coverage tool by unit tests is JaCoCo 
sonar.java.coveragePlugin=jacoco 

#Tells SonarQube to reuse existing reports for unit tests execution and coverage reports 
sonar.dynamicAnalysis=reuseReports 

# Some properties that will be inherited by the modules 
sonar.sources=src/java,test/java,src/java-test 

# Sonar Unit Test Report path 
sonar.jacoco.reportPath=build/jacoco/test.exec 

# Sonar Integration Test Report Path 
sonar.jacoco.itReportPath=build/jacoco/integrationTest.exec 

sonar.junit.reportsPath=build/UT/results 

# Sonar Binaries 
sonar.binaries=build/classes/main 

उत्तर

2

कारणों का पता लगा संकुचन: मुझे लगता है कि एकता परीक्षण के लिए .exec फ़ाइल के कारण है। इसे साबित करने के लिए: मैंने यूटी एक्सएक्स फ़ाइल को दोनों रिपोर्टों में पारित किया है, सोनार वैरिएबल में पैथ्स और निम्नलिखित में सोनारक्यूब ने यूटी/आईटी परीक्षण कवरेज दोनों को चुना है। यह साबित करता है कि यदि आईटी परीक्षण के लिए .exec फ़ाइल अच्छी है (जो मुझे लगता है कि यह है लेकिन मुझे दोबारा जांच करने की आवश्यकता है) तो सोनार .exec फ़ाइल लेगा और 0.0% के बजाय वैध कवरेज% दिखाएगा। नोट: अगर सोनार मूल्य उठा रहा है या नहीं तो निम्नलिखित केवल साबित करना है। itReportPath चर को .exe फ़ाइल का उपयोग करना चाहिए जो जैकोको द्वारा एकीकरण परीक्षण द्वारा उत्पन्न होता है।

sonar.jacoco.reportPath=build/jacoco/test.exec 

# Sonar Integration Test Report Path 
#sonar.jacoco.itReportPath=build/jacoco/testintegrationTest.exec 
sonar.jacoco.itReportPath=build/jacoco/test.exec 

ठीक है इस मुद्दे को मिला। मैं एकीकरण चला रहा था Gradle में सबसे अच्छा कार्य और Jacocoagent.jar (जैको दस्तावेज़ के अनुसार) को JVM (टॉमकैट के उदाहरण) दायरे में संलग्न नहीं कर रहा था। एक बार मैंने ऐसा करने के बाद, मैंने एकीकरण से जैकोको {...} अनुभाग हटा दिया Gradle में सबसे अच्छा कार्य (build.gradle या GRADLE_HOME/init.d/some.common.gradle फ़ाइल के रूप में यह जावा JVM में जेकोको एजेंट संलग्न करता है जिसमें ग्राडल चल रहा है)। अब, एक बार jacocoagent।जार को टॉमकैट के जेवीएम से जोड़ा गया था (नीचे दी गई रेखा के अनुसार जो मैंने टॉमकैट की स्टार्टअप.श स्क्रिप्ट में जोड़ा था और चरम को उस कमांड में जोड़ा जो टॉमकैट शुरू करता है), फिर मैंने आईटी परीक्षण चलाने के लिए ग्रैडल (एकीकरण टेस्ट) कार्य चलाया।

PROJ_EXTRA_JVM_OPTS=-javaagent:tomcat/jacocoagent.jar=destfile=build/jacoco/IT/jacocoIT.exec,append=false 

तब जबकि Gradle प्रगति पर था, परीक्षण भाग गया और मैं कुछ फ़ाइल आकार के साथ एक फ़ाइल (दिए गए स्थान पर jacocoIT.exec) मिला है, लेकिन यह अभी तक अंतिम नहीं है। मुझे टॉमकैट की स्टॉप.श्री स्क्रिप्ट चलाकर टॉमकैट सत्र/जेवीएम इंस्टेंस को रोकना पड़ा। एक बार टोमकैट बंद हो जाने के बाद, मैंने देखा कि jacocoIT.exec फ़ाइल का आकार काफी बढ़ गया है और यह वैध अंतिम jacocoIT.exec फ़ाइल थी (जिसे मुझे सोनाररुनर ग्रैडल कार्य या सोनार-धावक के लिए आवश्यक था, जिसे प्रोजेक्ट के सोनार डैशबोर्ड पर आईटी कोड कवरेज डेटा को चुनने और सफलतापूर्वक पुश करने के लिए निष्पादन योग्य)। एक बार हो जाने पर, मुझे यूटी + आईटी और यह संयुक्त कोड कवरेज दोनों मिला।

sonar.jacoco.reportPath=build/jacoco/UT/jacocoUT.exec 
sonar.jacoco.itReportPath=build/jacoco/IT/jacocoIT.exec 
संबंधित मुद्दे