指南:在 Jenkins 中通过电子邮件发送范围报告数据

指南:在 Jenkins 中通过电子邮件发送范围报告数据
指南:在 Jenkins 中通过电子邮件发送范围报告数据

范围报告集成概述

将范围报告与 Jenkins 集成以实现自动化 Java 项目可以增强测试结果的可见性,这对于持续集成环境至关重要。此设置通常包括 TestNG、Maven 和 Extent Reporter,通过 SureFire 进行管理,允许夜间构建和详细报告。

然而,一个常见的挑战是从 Extent Reporter HTML 仪表板中提取特定数据,例如测试计数和通过/失败率,以包含在 Jenkins 电子邮件通知中。这就需要一个脚本或方法来从 HTML 内容中有效地解析这些详细信息,以实现自动传播。

命令 描述
groovy.json.JsonSlurper 在 Groovy 中用于解析 JSON 格式的数据,促进 JSON 文件或响应的数据处理。
new URL().text 创建一个新的 URL 对象并以文本形式获取内容,通常用于直接从 Web 资源读取数据。
jenkins.model.Jenkins.instance 单例模式访问 Jenkins 当前运行的实例,允许操作作业配置和设置。
Thread.currentThread().executable 在 Jenkins 脚本化管道中使用,以获取对当前正在运行的构建或作业的引用,通常用于动态处理。
hudson.util.RemotingDiagnostics 允许在远程 Jenkins 节点上执行 Groovy 脚本,主要用于脚本内的诊断目的。
Transport.send(message) JavaMail API 的一部分用于发送脚本中准备的电子邮件消息,这对于通知系统至关重要。

脚本实现说明

提供的脚本旨在自动从 Jenkins 的范围报告中提取测试数据,并通过电子邮件发送此数据,作为持续集成反馈循环的一部分。第一个重要的命令是 groovy.json.JsonSlurper,这对于在 Jenkins 环境中解析 JSON 数据至关重要。这使得脚本能够有效地处理 JSON 响应或文件,这对于从范围报告中提取 JSON 格式的测试结果至关重要。使用的另一个关键命令是 new URL().text,它访问 Jenkins 上托管的 Extent Reports 的 HTML 报告。此命令以纯文本形式获取 HTML 内容,使脚本能够抓取所需的数据,例如总测试、通过和失败的测试。

通过使用正则表达式查找 HTML 文本中的特定模式,识别与总测试、通过测试和失败测试相关的数字,进一步管理数据的提取。这 jenkins.model.Jenkins.instance 然后使用命令来引用当前的 Jenkins 实例,这是获取各种作业详细信息并以编程方式配置设置所必需的。数据提取后,脚本使用 Transport.send(message) 从 JavaMail API 发送构建的电子邮件。此命令对于发送包含提取的测试结果的电子邮件通知至关重要,确保利益相关者直接通过电子邮件更新最新的测试结果,从而缩短开发周期中的沟通和响应时间。

从 Jenkins 中的范围报告中提取数据

Jenkins 管道的 Java 和 Groovy 脚本

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)

在 Jenkins 中增强电子邮件通知的脚本

在 Jenkins 构建后操作中使用 Groovy

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)

通过 Jenkins 增强自动报告

使用范围报告在 Jenkins 内实现自动数据提取和电子邮件通知可显着优化持续集成 (CI) 流程。这种方法不仅确保及时更新,而且还通过向利益相关者提供即时测试结果来促进主动问题解决。该过程利用 Jenkins 的功能来安排和运行夜间自动化测试,然后直接从 Extent Reporter 生成的 HTML 报告中解析这些测试以提取关键指标,例如测试总数、通过和失败。

这种自动提取和报告简化了敏捷开发环境所必需的反馈机制。通过将 Extent Reports 与 Jenkins 集成,团队可以通过持续监控和评估更好地管理测试结果并保持高标准的代码质量。这些操作对于维持高效的开发流程并确保所有团队成员与最新的测试结果和项目状态保持一致至关重要。

有关 Jenkins 报告集成的常见问题

  1. 如何配置 Jenkins 在构建后发送电子邮件?
  2. 您可以使用“电子邮件通知”选项在作业配置的构建后操作中进行配置。
  3. Jenkins 背景下的范围报告是什么?
  4. Extent Reports 是一个开源报告工具,可提供有关自动化测试的交互式详细报告,并可轻松集成到 Jenkins 管道中。
  5. 除了范围报告之外,Jenkins 还可以与其他报告工具集成吗?
  6. 是的,Jenkins 支持使用各自的插件与其他几个报告工具(如 JUnit、TestNG 等)集成。
  7. 如何在 Jenkins 中从 HTML 报告中提取测试数据?
  8. 您通常在 Jenkins 中使用 Groovy 或 Python 脚本来解析 HTML 内容并提取所需的数据。
  9. Jenkins 中的自动电子邮件通知有哪些好处?
  10. 自动电子邮件提供有关构建和测试状态的即时反馈,帮助团队更快地解决问题并维持持续的部署工作流程。

关于自动化 Jenkins 报告的最终想法

自动从范围报告中提取测试指标并将其集成到 Jenkins 电子邮件通知中,可显着增强 CI 管道内的监控功能。这种方法使团队能够及时收到有关测试结果的更新,促进快速采取行动来修复故障和改进代码。简化的流程不仅节省了时间,还通过确保所有利益相关者及时了解夜间构建的状态来优化资源分配,从而保持反馈和开发的持续循环。