Kapsam Raporlama Entegrasyonuna Genel Bakış
Otomatik Java projeleri için Kapsam Raporlamanın Jenkins ile entegre edilmesi, sürekli entegrasyon ortamları için çok önemli olan test sonuçlarının görünürlüğünü artırır. Bu kurulum genellikle SureFire aracılığıyla yönetilen TestNG, Maven ve Extent Reporter'ı içerir ve gecelik derlemelere ve ayrıntılı raporlamaya olanak tanır.
Ancak, Jenkins e-posta bildirimlerine dahil edilmek üzere Extent Reporter HTML kontrol panelinden test sayıları ve başarılı/başarısız oranları gibi belirli verilerin çıkarılması yaygın bir zorluktur. Bu, otomatik dağıtım için bu ayrıntıları HTML içeriğinden etkili bir şekilde ayrıştıracak bir komut dosyası veya yöntem gerektirir.
| Emretmek | Tanım |
|---|---|
| groovy.json.JsonSlurper | JSON formatlı verileri ayrıştırmak için Groovy'de kullanılır ve JSON dosyalarından veya yanıtlarından veri işlenmesini kolaylaştırır. |
| new URL().text | Yeni bir URL nesnesi oluşturur ve içeriği, genellikle doğrudan web kaynaklarından veri okumak için kullanılan metin olarak getirir. |
| jenkins.model.Jenkins.instance | Tekil desen, iş yapılandırmalarının ve ayarlarının değiştirilmesine olanak tanıyan, Jenkins'in geçerli çalışan örneğine erişim sağlar. |
| Thread.currentThread().executable | Jenkins'in betikli işlem hattında, genellikle dinamik işleme amacıyla, halihazırda çalışmakta olan yapıya veya işe referans almak için kullanılır. |
| hudson.util.RemotingDiagnostics | Groovy komut dosyalarının, öncelikle komut dosyaları içinde tanılama amacıyla kullanılan uzak Jenkins düğümlerinde yürütülmesine izin verir. |
| Transport.send(message) | Bildirim sistemleri için gerekli olan, komut dosyasında hazırlanmış bir e-posta mesajı göndermek için kullanılan JavaMail API'nin bir parçası. |
Komut Dosyası Uygulama Açıklaması
Sağlanan komut dosyaları, Jenkins'teki Kapsam Raporlarından test verilerinin çıkarılmasını otomatikleştirmek ve bu verileri sürekli entegrasyon geri bildirim döngüsünün bir parçası olarak e-posta yoluyla göndermek için tasarlanmıştır. İlk önemli komut groovy.json.JsonSlurperJSON verilerinin Jenkins ortamında ayrıştırılması için gereklidir. Bu, betiğin JSON yanıtlarını veya dosyalarını verimli bir şekilde işlemesine olanak tanır; bu, JSON'da biçimlendirilmiş test sonuçlarının Kapsam Raporlarından çıkarılması için çok önemlidir. Kullanılan diğer bir tuş komutu ise new URL().textJenkins'te barındırılan Kapsam Raporlarının HTML raporuna erişen. Bu komut, HTML içeriğini düz metin olarak getirerek betiğin toplam testler, başarılı ve başarısız testler gibi gerekli verileri toplamasına olanak tanır.
Verilerin çıkarılması, HTML metninde belirli kalıpları bulmak için normal ifadeler kullanılarak, toplam, başarılı ve başarısız testlerle ilişkili sayıların tanımlanmasıyla daha da yönetilir. jenkins.model.Jenkins.instance komutu daha sonra çeşitli iş ayrıntılarını getirmek ve ayarları programlı olarak yapılandırmak için gerekli olan mevcut Jenkins örneğine referans vermek için kullanılır. Veri çıkarma sonrası, komut dosyası kullanır Transport.send(message) Oluşturulan e-postayı göndermek için JavaMail API'sinden. Bu komut, çıkarılan test sonuçlarıyla birlikte e-posta bildirimleri göndermek, paydaşların en son test sonuçlarıyla doğrudan e-posta yoluyla güncellenmesini sağlamak ve böylece geliştirme döngülerinde iletişim ve yanıt sürelerini artırmak için çok önemlidir.
Jenkins'teki Kapsam Raporlarından Veri Çıkarma
Jenkins Pipelines için Java ve Groovy Komut Dosyaları
import hudson.model.*import hudson.util.RemotingDiagnosticsimport groovy.json.JsonSlurperdef extractData() {def build = Thread.currentThread().executabledef reportUrl = "${build.getProject().url}${build.number}/HTML_20Report/index.html"def jenkinsConsole = new URL(reportUrl).textdef matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Total Tests:\\s*</span>(\\d+)</br>"def totalTests = matcher ? Integer.parseInt(matcher[0][1]) : 0matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Passed Tests:\\s*</span>(\\d+)</br>"def passedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Failed Tests:\\s*</span>(\\d+)</br>"def failedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0return [totalTests, passedTests, failedTests]}def sendEmail(testResults) {def emailExt = Jenkins.instance.getExtensionList('hudson.tasks.MailSender')[0]def emailBody = "Total Tests: ${testResults[0]}, Passed: ${testResults[1]}, Failed: ${testResults[2]}"emailExt.sendMail(emailBody, "jenkins@example.com", "Test Report Summary")}def results = extractData()sendEmail(results)
Jenkins'te E-posta Bildirimlerini Geliştirmeye Yönelik Komut Dosyası
Jenkins'in Yapım Sonrası Eylemlerinde Groovy'yi Kullanmak
import groovy.json.JsonSlurperimport jenkins.model.Jenkinsimport javax.mail.Messageimport javax.mail.Transportimport javax.mail.internet.InternetAddressimport javax.mail.internet.MimeMessagedef fetchReportData() {def job = Jenkins.instance.getItemByFullName("YourJobName")def lastBuild = job.lastBuilddef reportUrl = "${lastBuild.url}HTML_20Report/index.html"new URL(reportUrl).withReader { reader ->def data = reader.textdef jsonSlurper = new JsonSlurper()def object = jsonSlurper.parseText(data)return object}}def sendNotification(buildData) {def session = Jenkins.instance.getMailSession()def message = new MimeMessage(session)message.setFrom(new InternetAddress("jenkins@example.com"))message.setRecipients(Message.RecipientType.TO, "developer@example.com")message.setSubject("Automated Test Results")message.setText("Test Results: ${buildData.totalTests} Total, ${buildData.passed} Passed, ${buildData.failed} Failed.")Transport.send(message)}def reportData = fetchReportData()sendNotification(reportData)
Jenkins aracılığıyla Otomatik Raporlamada İyileştirmeler
Kapsam Raporları kullanılarak Jenkins'te otomatik veri çıkarma ve e-posta bildirimlerinin uygulanması, sürekli entegrasyon (CI) sürecini önemli ölçüde optimize eder. Bu metodoloji yalnızca zamanında güncellemeler sağlamakla kalmaz, aynı zamanda paydaşlara anında test sonuçları sağlayarak proaktif sorun çözümünü de kolaylaştırır. Süreç, Jenkins'in otomatik testleri gece boyunca planlama ve çalıştırma yeteneklerini kullanır; bunlar daha sonra doğrudan Extent Reporter tarafından oluşturulan HTML raporlarından toplam test, başarılı ve başarısızlık sayısı gibi önemli ölçümleri çıkarmak için ayrıştırılır.
Bu otomatik çıkarma ve raporlama, çevik geliştirme ortamları için gerekli olan geri bildirim mekanizmasını kolaylaştırır. Ekipler, Kapsam Raporlarını Jenkins ile entegre ederek test sonuçlarını daha iyi yönetebilir ve sürekli izleme ve değerlendirme yoluyla yüksek kod kalitesi standartlarını koruyabilir. Bu operasyonlar, verimli bir geliştirme hattının sürdürülmesi ve tüm ekip üyelerinin en son test sonuçları ve proje durumlarıyla uyumlu olmasını sağlamak açısından kritik öneme sahiptir.
Jenkins Raporlama Entegrasyonu Hakkında Sık Sorulan Sorular
- Jenkins'i derlemeden sonra e-posta gönderecek şekilde nasıl yapılandırabilirim?
- Bunu, E-posta Bildirimi seçeneğini kullanarak iş yapılandırmanızın oluşturma sonrası eylemlerinde yapılandırabilirsiniz.
- Jenkins bağlamında Kapsam Raporları nedir?
- Kapsam Raporları, otomatik testlerle ilgili etkileşimli ve ayrıntılı raporlar sağlayan, Jenkins işlem hatlarına kolayca entegre edilebilen açık kaynaklı bir raporlama aracıdır.
- Jenkins, Kapsam Raporlarının yanı sıra diğer raporlama araçlarıyla da entegre olabilir mi?
- Evet, Jenkins, ilgili eklentileri kullanarak JUnit, TestNG ve daha fazlası gibi diğer birçok raporlama aracıyla entegrasyonu destekler.
- Jenkins'te bir HTML raporundan test verilerini nasıl çıkarabilirim?
- HTML içeriğini ayrıştırmak ve gerekli verileri çıkarmak için genellikle Jenkins'te Groovy veya Python komut dosyalarını kullanırsınız.
- Jenkins'te otomatik e-posta bildirimlerinin faydaları nelerdir?
- Otomatik e-postalar, oluşturma ve test durumları hakkında anında geri bildirim sağlayarak ekiplerin sorunları daha hızlı çözmesine ve dağıtım iş akışlarını sürekli sürdürmesine yardımcı olur.
Otomatik Jenkins Raporlaması Hakkında Son Düşünceler
Kapsam Raporlarından test metriklerinin çıkarılmasının otomatikleştirilmesi ve bunların Jenkins e-posta bildirimlerine entegre edilmesi, bir CI hattındaki izleme yeteneklerini önemli ölçüde artırır. Bu yaklaşım, ekiplerin test sonuçlarıyla ilgili güncellemeleri zamanında almasına olanak tanıyarak hataları düzeltmeye ve kodu iyileştirmeye yönelik hızlı eylemleri teşvik eder. Kolaylaştırılmış süreç yalnızca zamandan tasarruf sağlamakla kalmıyor, aynı zamanda tüm paydaşların gece yapılan inşaatların durumu hakkında anında bilgi almasını sağlayarak kaynak tahsisini de optimize ediyor ve böylece sürekli bir geri bildirim ve geliştirme döngüsünü sürdürüyor.