Jenkins - วิธีการค้นหาที่ทดสอบล้มเหลวซ้ำแล้วซ้ำอีก


13

ฉันใหม่กับ CI และเจนกินส์ ฉันมีโครงการ Java ที่รันการทดสอบอัตโนมัติ Testng บนบริการเว็บ การทดสอบระบบอัตโนมัติทำงานเป็นประจำใน Jenkins บางครั้งงานล้มเหลวซ้ำแล้วซ้ำอีกเป็นเวลานาน แต่ในการทดสอบแต่ละครั้งจำนวนความล้มเหลวในการทดสอบจะแตกต่างกัน ฉันต้องการดูว่าการทดสอบใดล้มเหลวซ้ำหลายครั้งในช่วง 5 ครั้งสุดท้าย ด้วยสิ่งนี้ฉันสามารถลดจำนวนความล้มเหลวในการทดสอบที่ฉันต้องตรวจสอบ ความล้มเหลวที่ไม่ได้ทำซ้ำทั้งหมดในการทำงาน 5 ครั้งล่าสุดอาจถูกละเว้นหรือตรวจสอบในภายหลัง

ใครช่วยกรุณาแนะนำวิธีที่ฉันสามารถค้นหาการทดสอบที่ล้มเหลวซ้ำแล้วซ้ำอีกในการทำงานที่ผ่านมา N?


ยังไงก็เถอะคุณต้องบันทึกผลการทดสอบที่ต้องการในแบบง่าย ๆ เพื่อดูความล้มเหลว อาจเป็นเพียงในรูปแบบ 'XEXX' โดยที่ E ย่อมาจากข้อผิดพลาดและทั้งบรรทัดสำหรับการทดสอบทั้งหมด เช่นเดียวกับที่คุณสามารถบันทึกไว้ใน textfile โดยไม่มีพื้นที่มาก
David

สำหรับการทดสอบทุกครั้งที่คุณสร้างบรรทัดใหม่จากนั้นจึงง่ายต่อการดูหรือวิเคราะห์โดยสคริปต์
David

คุณมีปลั๊กอินทดสอบ -ng ​​และคุณสามารถเผยแพร่ผลลัพธ์ในแต่ละครั้ง ... จากนั้นคุณสามารถเปรียบเทียบแต่ละ
rohit thomas

@rohitthomas - คุณแนะนำให้เปรียบเทียบการสร้างด้วยตนเองหรือไม่ ฉันต้องการหลีกเลี่ยงสิ่งนั้น
Erran Morad

คุณคิดว่า 'ล้มเหลวซ้ำ ๆ ' คืออะไร? คุณหมายถึง testcase ทั้งหมดที่ล้มเหลวในการรัน 5 ครั้งล่าสุดหรือเฉพาะ testcase ทั้งหมดที่ล้มเหลวในการประมวลผล 3 ครั้งจาก 5 ครั้ง?
Michael Kemmerzell

คำตอบ:


7

คุณสามารถใช้จำนวนครั้งที่การทดสอบล้มเหลวจากวัตถุของบิลด์ในไพพ์ไลน์: คุณสามารถสร้างรายงานขนาดเล็กและแนบกับบิลด์ของคุณได้

@NonCPS
def getRepeatedlyFailingTests(int timesFailedAtLeast = 2) {
  currentBuild.rawBuild.getAction(hudson.tasks.junit.TestResultAction.class)
    .getFailedTests()
    // Keep only tests that failed at least twice
    .findAll { it.age >= timesFailedAtLeast }
    .collect { [ "${it.className}.${it.name}".trim(), it.age ] }
}

def saveRepeatedlyFailingTestsReport() {
  def header = [ "test", "times-failed" ]
  def records = getRepeatedlyFailingTests()
  def report = "repeatedly-failing-tests.csv"
  writeCSV file: report, records: [ header ] + records, format: CSVFormat.EXCEL
  archiveArtifacts report
}

โทรsaveRepeatedlyFailingTestsReportหลังจากที่คุณรวบรวมผลการทดสอบของคุณแล้วคุณจะเห็นรายงานในลิงค์ส่วนสร้างล่าสุดของคุณ


1
ภาษานี้คืออะไร? คุณช่วยเพิ่มรายละเอียดเพิ่มเติมได้ไหม ฉันจะเพิ่มรางวัลเพื่อหวังว่าจะทำให้มันคุ้มค่า ขอบคุณ
Erran Morad

1
@BoratSagdiyev นี่คือ Groovy DSL ที่ใช้ใน Jenkins ไปป์ไลน์ หากคุณต้องการความช่วยเหลือด้านภาพฉันจะไปกับคำตอบของ Sooraj เนื่องจากไม่ต้องการความรู้ด้านท่อ ในการสร้างขั้นตอนการทำงานที่สมบูรณ์ฉันจำเป็นต้องรู้จักงานฟรีสไตล์ของคุณ แต่นั่นไม่ได้อยู่ในขอบเขตของคำถาม
ผ้าเช็ดตัว

2

คุณสามารถใช้ปลั๊กอินตัววิเคราะห์ผลลัพธ์การทดสอบจากเจนกินส์เพื่อวิเคราะห์แนวโน้มของการทดสอบ

ทดสอบปลั๊กอินตัววิเคราะห์ผลลัพธ์

วิดีโอสอนจาก youtube

การติดตั้ง :

  1. ในแผงควบคุมของเจนกินส์คลิกที่จัดการเจนกินส์
  2. จากเมนูเลือกจัดการปลั๊กอิน
  3. คลิกที่แท็บที่มีอยู่และตัววิเคราะห์อินพุตในกล่องค้นหาตัวกรอง
  4. คลิกกล่องกาไปทางซ้ายของผลการทดสอบวิเคราะห์และคลิกติดตั้งโดยไม่ต้องรีสตาร์ทปุ่ม

การใช้งาน :

  1. ไปที่โครงการและคลิกที่กำหนดค่า
  2. ไปที่ส่วน การดำเนินการสร้างภายหลังและเลือกเผยแพร่รายงานผลการทดสอบ JUnitจากดรอปดาวน์แอ็คชันเพิ่มการสร้างภายหลัง
  3. ในฟิลด์รายงานการทดสอบ XML ให้เส้นทางของ TestNg / JUnit xml ในโครงการ ตัวอย่างเช่น - **/target/test-results/*.xmlในกรณีของฉัน
  4. บันทึกการกำหนดค่า
  5. จากนั้นหลังจากการสร้างที่ประสบความสำเร็จให้ไปที่โครงการของคุณแล้วคลิกที่ตัววิเคราะห์ผลลัพธ์การทดสอบที่เมนูด้านซ้าย

ขอบคุณสำหรับลิงค์ แต่ลิงก์คำตอบเท่านั้นไม่ได้ช่วยอะไรมาก คุณช่วยเพิ่มคำอธิบายสั้น ๆ ว่าฉันจะใช้ปลั๊กอินเพื่อให้ได้สิ่งที่ฉันต้องการได้อย่างไร
Erran Morad

ติดตั้งปลั๊กอินและกำหนดค่าปลั๊กอินโครงการที่ต้องการของโพสต์สร้างการดำเนินการ จากนั้นหลังจากการสร้างที่ประสบความสำเร็จคุณสามารถดูผลลัพธ์ได้โดยคลิกที่เครื่องวิเคราะห์ผลการทดสอบที่เมนูด้านซ้ายของโครงการของคุณ
Sooraj

@ Borat Sagdiyev ฉันได้อัปเดตคำตอบพร้อมขั้นตอนอย่างละเอียดและวิดีโอเพื่อกำหนดค่าปลั๊กอินTest Results Analyzer หวังว่านี่จะช่วยได้;)
Sooraj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.