คำถามที่พบบ่อย
คำถามจากหัวของฉันตั้งแต่ตอนนั้นฉันก็คลั่งไคล้จาโคโค่
แอปพลิเคชันเซิร์ฟเวอร์ของฉัน (jBoss, Glassfish .. ) ตั้งอยู่ในอิรักซีเรียอะไรก็ได้ .. เป็นไปได้ไหมที่จะได้รับการครอบคลุมหลายโมดูลเมื่อทำการทดสอบการรวมกับมัน? Jenkins และ Sonar อยู่บนเซิร์ฟเวอร์ที่แตกต่างกัน
ใช่. คุณต้องใช้ตัวแทน jacocoที่ทำงานในโหมดoutput=tcpserver
jacoco ant lib โดยทั่วไปสองjar
วินาที สิ่งนี้จะทำให้คุณประสบความสำเร็จ 99%
ตัวแทนจาโคโคทำงานอย่างไร?
คุณต่อท้ายสตริง
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
ไปยังแอ็พพลิเคชันเซิร์ฟเวอร์ JAVA_OPTS ของคุณแล้วรีสตาร์ท ในสตริงนี้[your_path]
จะต้องถูกแทนที่ด้วยพา ธ ไปยัง jacocoagent.jar ที่จัดเก็บ (เก็บไว้!) บน VM ของคุณที่เซิร์ฟเวอร์แอปทำงาน ตั้งแต่เวลานั้นคุณเริ่มเซิร์ฟเวอร์แอปแอปพลิเคชันทั้งหมดที่ปรับใช้จะได้รับการตรวจสอบแบบไดนามิกและกิจกรรม (หมายถึงการใช้รหัส) จะพร้อมให้คุณรับในรูปแบบ jacocos .exec ตามคำขอ tcl
ฉันสามารถรีเซ็ต jacoco agent เพื่อเริ่มรวบรวมข้อมูลการดำเนินการนับตั้งแต่เวลาเริ่มการทดสอบได้หรือไม่
ใช่เพื่อจุดประสงค์นั้นคุณต้องใช้ jacocoant.jar และสคริปต์สร้างมดที่อยู่ในพื้นที่ทำงานเจนกินส์ของคุณ
โดยพื้นฐานแล้วสิ่งที่ฉันต้องการจาก http://www.eclemma.org/jacoco/ คือ jacocoant.jar ที่อยู่ในพื้นที่ทำงานเจนกินส์ของฉันและ jacocoagent.jar ที่อยู่บน VM เซิร์ฟเวอร์แอปของฉัน
ถูกตัอง.
ฉันไม่ต้องการใช้มดฉันได้ยินมาว่าปลั๊กอิน jacoco maven สามารถทำทุกอย่างได้เช่นกัน
ไม่ถูกต้องปลั๊กอิน jacoco maven สามารถรวบรวมข้อมูลการทดสอบหน่วยและข้อมูลการทดสอบการรวมบางอย่าง (ดูArquillian Jacoco ) แต่ถ้าคุณมีตัวอย่างเช่นโปรดมั่นใจว่าการทดสอบเป็นโครงสร้างแยกต่างหากในเจนกินส์และต้องการแสดงการครอบคลุมหลายโมดูลฉันทำได้ ไม่เห็นว่าปลั๊กอิน maven สามารถช่วยคุณได้อย่างไร
ตัวแทนจาโคโคผลิตอะไรกันแน่?
ครอบคลุมเฉพาะข้อมูลใน.exec
รูปแบบ Sonar ก็สามารถอ่านได้
จาโคโคจำเป็นต้องรู้หรือไม่ว่าชั้นเรียนจาวาของฉันอยู่ที่ไหน?
ไม่โซนาร์ทำ แต่ไม่ใช่จาโคโค่ เมื่อคุณทำmvn sonar:sonar
เส้นทางสู่ชั้นเรียนเข้ามามีบทบาท
แล้วบทมดล่ะ?
จะต้องถูกนำเสนอในพื้นที่ทำงานของเจนกินส์ ฉันเรียกมันว่าสคริปต์มดฉันเรียกมันjacoco.xml
ว่า:
<project name="Jacoco library to collect code coverage remotely" xmlns:jacoco="antlib:org.jacoco.ant">
<property name="jacoco.port" value="6300"/>
<property name="jacocoReportFile" location="${workspace}/it-jacoco.exec"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${workspace}/tools/jacoco/jacocoant.jar"/>
</taskdef>
<target name="jacocoReport">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
</target>
<target name="jacocoReset">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
<delete file="${jacocoReportFile}"/>
</target>
</project>
พารามิเตอร์บังคับสองตัวที่คุณควรส่งผ่านเมื่อเรียกใช้สคริปต์นี้
-Dworkspace=$WORKSPACE
ใช้เพื่อชี้ไปที่พื้นที่ทำงานเจนกินส์และ-Djacoco.host=yourappserver.com
โฮสต์ที่ไม่มีhttp://
โปรดสังเกตด้วยว่าฉันใส่ไว้jacocoant.jar
ที่ $ {workspace} /tools/jacoco/jacocoant.jar
ควรทำอย่างไรต่อไป
คุณเริ่มเซิร์ฟเวอร์แอปด้วย jacocoagent.jar หรือไม่
คุณใส่ ant script และ jacocoant.jar ไว้ในพื้นที่ทำงานของเจนกินส์หรือไม่?
ถ้าใช่ขั้นตอนสุดท้ายคือกำหนดค่าการสร้างเจนกินส์ นี่คือกลยุทธ์:
- เรียกใช้เป้าหมายมด
jacocoReset
เพื่อรีเซ็ตข้อมูลที่รวบรวมไว้ก่อนหน้านี้ทั้งหมด
- ทำการทดสอบของคุณ
- เรียกใช้เป้าหมายมด
jacocoReport
เพื่อรับรายงาน
หากทุกอย่างถูกต้องคุณจะเห็นit-jacoco.exec
ในพื้นที่ทำงานบิลด์ของคุณ
ดูภาพหน้าจอฉันได้ant
ติดตั้งในพื้นที่ทำงานของฉันใน$WORKSPACE/tools/ant
dir แล้ว แต่คุณสามารถใช้ภาพที่ติดตั้งในเจนกินส์ของคุณได้
จะส่งรายงานนี้ในโซนาร์ได้อย่างไร?
Maven sonar:sonar
จะทำงาน (อย่าลืมกำหนดค่า) ชี้ไปที่ pom.xml หลักเพื่อให้ทำงานผ่านโมดูลทั้งหมด ใช้sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
พารามิเตอร์เพื่อบอกโซนาร์ว่ารายงานการทดสอบการรวมของคุณอยู่ที่ใด it-jacoco.exec
ทุกครั้งที่มันจะวิเคราะห์ชั้นเรียนโมดูลใหม่ก็จะหาข้อมูลเกี่ยวกับความคุ้มครองใน
ฉันมี jacoco.exec อยู่แล้วใน "target" dir ของฉันโซนาร์ `mvn: sonar` ละเว้น / ลบออก
โดยค่าเริ่มต้นmvn sonar:sonar
จะทำclean
และลบ dir เป้าหมายของคุณให้ใช้sonar.dynamicAnalysis=reuseReports
เพื่อหลีกเลี่ยง