Vadovas: Siųskite ataskaitos duomenis el. paštu Jenkins

Groovy Scripting

Ataskaitų apimties integravimo apžvalga

Integruojant apimties ataskaitų teikimą su „Jenkins“ automatizuotiems „Java“ projektams, padidėja testo rezultatų matomumas, o tai labai svarbu nuolatinio integravimo aplinkoms. Ši sąranka paprastai apima „TestNG“, „Maven“ ir „Extent Reporter“, valdomą per „SureFire“, leidžiančią kasnakt kurti ir teikti išsamias ataskaitas.

Tačiau dažnas iššūkis yra iš Extent Reporter HTML prietaisų skydelio išgauti konkrečius duomenis, pvz., bandymų skaičių ir sėkmingų/nepavykusių rezultatų santykį, kad būtų galima įtraukti į Jenkins el. pašto pranešimus. Tam reikalingas scenarijus arba metodas, leidžiantis efektyviai išanalizuoti šią informaciją iš HTML turinio, kad būtų galima automatiškai platinti.

komandą apibūdinimas
groovy.json.JsonSlurper Naudojamas Groovy JSON formato duomenims analizuoti, palengvinant duomenų tvarkymą iš JSON failų ar atsakymų.
new URL().text Sukuria naują URL objektą ir nuskaito turinį kaip tekstą, dažniausiai naudojamą duomenims skaityti tiesiai iš žiniatinklio išteklių.
jenkins.model.Jenkins.instance Singleton šablonas, leidžiantis pasiekti dabartinį Jenkins egzempliorių, leidžiantį manipuliuoti užduočių konfigūracijomis ir nustatymais.
Thread.currentThread().executable Naudojamas Jenkins scenarijaus konvejeryje norint gauti nuorodą į šiuo metu vykdomą versiją arba užduotį, dažnai dinaminiam tvarkymui.
hudson.util.RemotingDiagnostics Leidžia vykdyti „Groovy“ scenarijus nuotoliniuose „Jenkins“ mazguose, pirmiausia naudojamus scenarijų diagnostikos tikslais.
Transport.send(message) Dalis JavaMail API, naudojamos siųsti el. pašto pranešimus, paruoštus pagal scenarijų, būtiną pranešimų sistemoms.

Scenarijaus įgyvendinimo paaiškinimas

Pateikti scenarijai skirti automatizuoti bandymo duomenų ištraukimą iš „Jenkins“ apimties ataskaitų ir siųsti šiuos duomenis el. paštu kaip nuolatinio integravimo grįžtamojo ryšio ciklo dalį. Pirma svarbi komanda yra , kuri yra būtina analizuojant JSON duomenis Jenkins aplinkoje. Tai leidžia scenarijui efektyviai tvarkyti JSON atsakymus arba failus, o tai labai svarbu norint išgauti JSON formato bandymo rezultatus iš apimties ataskaitų. Kita naudojama klavišų komanda yra , kuri pasiekia „Jenkins“ priglobtų „Extent Reports“ HTML ataskaitą. Ši komanda gauna HTML turinį kaip paprastą tekstą, leidžiantį scenarijui nuskaityti reikalingus duomenis, pvz., bendrą testų skaičių, išlaikytus ir nesėkmingus testus.

Duomenų išgavimas toliau valdomas naudojant reguliariąsias išraiškas, siekiant rasti konkrečius šablonus HTML tekste, identifikuoti skaičius, susietus su bendrais, sėkmingais ir nesėkmingais testais. The Tada komanda naudojama nuorodai į dabartinį Jenkins egzempliorių, kuris reikalingas norint gauti įvairią darbo informaciją ir programiškai konfigūruoti parametrus. Scenarijus naudoja po duomenų ištraukimo iš JavaMail API, kad išsiųstumėte sukurtą el. Ši komanda yra labai svarbi siunčiant pranešimus el. paštu su išskirtais bandymo rezultatais, užtikrinant, kad suinteresuotosios šalys būtų atnaujintos su naujausiais testavimo rezultatais tiesiogiai el. paštu, taip pailginant komunikacijos ir atsakymo laiką kūrimo cikluose.

Duomenų ištraukimas iš apimties ataskaitų Jenkins

„Java“ ir „Groovy“ scenarijus, skirtas „Jenkins Pipelines“.

import hudson.model.*
import hudson.util.RemotingDiagnostics
import groovy.json.JsonSlurper
def extractData() {
    def build = Thread.currentThread().executable
    def reportUrl = "${build.getProject().url}${build.number}/HTML_20Report/index.html"
    def jenkinsConsole = new URL(reportUrl).text
    def matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Total Tests:\\s*</span>(\\d+)</br>"
    def totalTests = matcher ? Integer.parseInt(matcher[0][1]) : 0
    matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Passed Tests:\\s*</span>(\\d+)</br>"
    def passedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0
    matcher = jenkinsConsole =~ "<span class=\\"param_name\\">\\s*Failed Tests:\\s*</span>(\\d+)</br>"
    def failedTests = matcher ? Integer.parseInt(matcher[0][1]) : 0
    return [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)

Scenarijus, skirtas pagerinti el. pašto pranešimus Jenkins

Groovy panaudojimas Jenkins post-Build veiksmuose

import groovy.json.JsonSlurper
import jenkins.model.Jenkins
import javax.mail.Message
import javax.mail.Transport
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
def fetchReportData() {
    def job = Jenkins.instance.getItemByFullName("YourJobName")
    def lastBuild = job.lastBuild
    def reportUrl = "${lastBuild.url}HTML_20Report/index.html"
    new URL(reportUrl).withReader { reader ->
        def data = reader.text
        def 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)

Automatinio ataskaitų teikimo patobulinimai per Jenkins

Įdiegus automatinį duomenų išgavimą ir el. pašto pranešimus Jenkins sistemoje naudojant „Extent Reports“ žymiai optimizuojamas nuolatinis integravimo (CI) procesas. Ši metodika ne tik užtikrina savalaikius atnaujinimus, bet ir palengvina aktyvų problemų sprendimą, suteikdama suinteresuotosioms šalims neatidėliotinus testų rezultatus. Procesas išnaudoja Jenkins galimybes planuoti ir per naktį vykdyti automatizuotus testus, kurie vėliau analizuojami, kad būtų galima išgauti pagrindinę metriką, pvz., bendrą testų, sėkmingų ir gedimų skaičių, tiesiai iš Extent Reporter sugeneruotų HTML ataskaitų.

Šis automatizuotas išgavimas ir ataskaitų teikimas supaprastina grįžtamojo ryšio mechanizmą, būtiną judrioms kūrimo aplinkoms. Integruodamos „Extent Reports“ su „Jenkins“, komandos gali geriau valdyti testų rezultatus ir išlaikyti aukštus kodo kokybės standartus nuolatos stebėdamos ir vertindamos. Šios operacijos yra labai svarbios palaikant efektyvų kūrimo procesą ir užtikrinant, kad visi komandos nariai atitiktų naujausius testavimo rezultatus ir projekto būsenas.

  1. Kaip sukonfigūruoti „Jenkins“ siųsti el. laišką po kūrimo?
  2. Tai galite sukonfigūruoti atlikdami savo užduoties konfigūracijos veiksmus po kūrimo, naudodami parinktį Pranešimas el. paštu.
  3. Kas yra „Extent Reports“ Jenkinso kontekste?
  4. „Extent Reports“ yra atvirojo kodo ataskaitų teikimo įrankis, teikiantis interaktyvias ir išsamias automatinių testų ataskaitas, lengvai integruojamas į „Jenkins“ vamzdynus.
  5. Ar Jenkins gali integruotis su kitais ataskaitų teikimo įrankiais, išskyrus apimties ataskaitas?
  6. Taip, „Jenkins“ palaiko integraciją su keliais kitais ataskaitų teikimo įrankiais, tokiais kaip „JUnit“, „TestNG“ ir kt., naudojant atitinkamus papildinius.
  7. Kaip išgauti bandomuosius duomenis iš HTML ataskaitos Jenkins?
  8. Paprastai „Jenkins“ naudojate „Groovy“ arba „Python“ scenarijus, kad išanalizuoti HTML turinį ir išgauti reikiamus duomenis.
  9. Kokie yra automatinių pranešimų el. paštu „Jenkins“ pranašumai?
  10. Automatiniai el. laiškai suteikia tiesioginį grįžtamąjį ryšį apie kūrimo ir testavimo būsenas, padeda komandoms greičiau spręsti problemas ir palaikyti nuolatinę diegimo eigą.

Automatizuotas testavimo metrikos ištraukimas iš apimties ataskaitų ir jų integravimas į Jenkins el. pašto pranešimus žymiai pagerina CI konvejerio stebėjimo galimybes. Šis metodas leidžia komandoms laiku gauti naujienas apie bandymo rezultatus, skatinant greitus veiksmus siekiant pašalinti gedimus ir tobulinti kodą. Supaprastintas procesas ne tik taupo laiką, bet ir optimizuoja išteklių paskirstymą, nes užtikrina, kad visos suinteresuotosios šalys būtų operatyviai informuojamos apie naktinių pastatymo būseną, taip išlaikomas nuolatinis grįžtamojo ryšio ir tobulinimo ciklas.