Hudson/Jenkins--配置TestNG/JUnit的email-ext email模板

Jenkins发送测试报告邮件 简介:总结怎么使用Jenkins执行自动化测试后发送测试报告邮件一、系统设置1、在Jenkins安装Email Extension Plugin插件,如下图:2、设置Extended E-mail Notification进入“系统管理”-“系统设置”,对Extended E-mail Notification进行配置,具体参考下图: 注意:上图中的Password不是qq密码,而是在QQ邮箱 阅读详情

Hudson/Jenkins默认提供了发送邮件的功能,但是比较有局限性。插件Email-ext提供了比较好的email功能。安装好该插件后,可以在$JENKINS_HOME($HUDSON_HOME)/email-templates目录下定义自己的email模板。下面提供一个jelly script基于junit的测试结果生成email的模板,先上email效果图:


该email report风格比较清新,该有的信息都有了,通过的case用绿色标出,失败的case用红色标出,其他的log, 具体的report, 最近build的整体情况的link也都给出。

对应的jelly script(myreport.jelly)如下:

<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define">
 <body style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
  <j:set var="spc" value="&nbsp;&nbsp;" />
  <!-- GENERAL INFO -->
  <table style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
   <tr>
    <td align="right" style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     <j:choose>
      <j:when test="${build.result=='SUCCESS'}">
       <img src="${rooturl}static/e59dfe28/images/32x32/blue.gif">
       </img>
      </j:when>
      <j:when test="${build.result=='FAILURE'}">
       <img src="${rooturl}static/e59dfe28/images/32x32/red.gif">
       </img>
      </j:when>
      <j:otherwise>
       <img src="${rooturl}static/e59dfe28/images/32x32/yellow.gif">
       </img>
      </j:otherwise>
     </j:choose>
    </td>
    <td valign="center" style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     <b style="font-size: 200%;">
      TESTRUN ${build.result}
     </b>
    </td>
   </tr>
   <tr>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     Project:
    </td>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     ${project.name}
    </td>
   </tr>
   <tr>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     Date of run:
    </td>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     ${it.timestampString}
    </td>
   </tr>
   <tr>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     Test duration:
    </td>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     ${build.durationString}
    </td>
   </tr>
   <tr>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     Test report:
    </td>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     <a href="http://xxxxx:8080/view/job/${project.name}/${build.number}/xxx_build_report/">
      xxxxx Test Report
     </a>
    </td>
   </tr>
    <tr>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     Console logs:
    </td>
    <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
     <a href="${rooturl}${build.url}console">
      ${rooturl}${build.url}console
     </a>
    </td>
   </tr>
  </table>
  <br />
  
  <div style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
      <j:set var="healthIconSize" value="16x16" />
      <j:set var="healthReports" value="${project.buildHealthReports}" />
      <j:if test="${healthReports!=null}">
	  <b style="font-size: 160%;">Health Report</b>
	  <br />
        <table>
          <tr>
            <th>W</th>
            <th>Description</th>
            <th>Score</th>
          </tr>
          <j:forEach var="healthReport" items="${healthReports}">
            <tr>
              <td>
                <img src="${rooturl}${healthReport.getIconUrl(healthIconSize)}" />
              </td>
              <td>${healthReport.description}</td>
              <td>${healthReport.score}</td>
            </tr>
          </j:forEach>
        </table>
        <br />
      </j:if>
    </div>
	

  <j:set var="junitResultList" value="${it.JUnitTestResult}" />
    <j:if test="${junitResultList.isEmpty()!=true}">
	  <div style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">
        <b style="font-size: 160%;">Summary Report</b>
		<br />
        <table style="border: 1px solid black; border-collapse:collapse;">
          <tr>
            <th style="border: 1px solid black; border-collapse:collapse;">Package</th>
            <th style="border: 1px solid black; border-collapse:collapse;">Failed</th>
            <th style="border: 1px solid black; border-collapse:collapse;">Passed</th>
            <th style="border: 1px solid black; border-collapse:collapse;">Skipped</th>
            <th style="border: 1px solid black; border-collapse:collapse;">Total</th>
          </tr>
          <j:forEach var="junitResult" items="${it.JUnitTestResult}">
            <j:forEach var="packageResult" items="${junitResult.getChildren()}">
              <tr>
                <td style="border: 1px solid black; border-collapse:collapse;">
                  <tt>${packageResult.getName()}</tt>
                </td>
                <td style="border: 1px solid black;border-collapse:collapse; color:red;">${packageResult.getFailCount()}</td>
                <td style="border: 1px solid black;border-collapse:collapse; color:blue;">${packageResult.getPassCount()}</td>
                <td style="border: 1px solid black;border-collapse:collapse; color:grey;">${packageResult.getSkipCount()}</td>
                <td style="border: 1px solid black;border-collapse:collapse;">
                  <b>${packageResult.getPassCount()+packageResult.getFailCount()+packageResult.getSkipCount()}</b>
                </td>
              </tr>
			  <j:forEach var="passed_test" items="${packageResult.getPassedTests()}">
                <tr>
                  <td style="color:green;" colspan="5">
                    <tt>${passed_test.getFullName()}</tt>
                  </td>
                </tr>
              </j:forEach>
              <j:forEach var="failed_test" items="${packageResult.getFailedTests()}">
                <tr>
                  <td style="color:red;" colspan="5">
                    <tt>${failed_test.getFullName()}</tt>
                  </td>
                </tr>
              </j:forEach>
            </j:forEach>
          </j:forEach>
        </table>
		<br />
		<div>Note: See attachment also for summary report broken down by classes/methods.</div>
        <br />
      </div>
    </j:if>
 </body>
</j:jelly>

值得注意的是,在hudson/jenkins中,必须设置Publis JUnit test result report,同时,在editable email notification的Default Content中填入${JELLY_SCRIPT,template="myreport"},如下图所示:



使用Jenkins邮件配置在邮件中输出测试运行详细结果 Jenkins的邮件配置还是比较人性化的,提供了很多令牌供用户获取特定的内容并输出。如:  •     ${BUILD_NUMBER} -显示当前构建的编号。 •     ${BUILD_STATUS} -显示当前构建的状态(失败、成功等等) •     ${BUILD_URL} -显示当前构建的URL地址。 •     ${CHANGES, showPaths, format, path 阅读详情

相关推荐

Jenkins执行testNG生成美观的测试报告(Allure2)

一.Jinkens配置 1.插件管理下载aullre插件 2.全局工具配置中安装Allure Commandline 3.创建任务 3.1 配置工程路径 3.2 构建命令 3.3 配置allure报告路径 二. maven配置 1.8.10

qq_15290529的博客 1万+

自动化测试的三种测试报告模板

​ 本篇文章简单记录自动化测试的三种生成HTML测试报告方式。 ​

软件测试技术分享官 3148

Jenkins执行完构建后testng插件找不到testng-results.xml

昨天把Jenkins(ver. 2.107.1,此处注意,几乎是一个最新的Jenkins版本)安装在mac上,并建了一个简单的job,来体验下Jenkins+Maven+testng的效果,遇到这样一个有意思的问题,就是使用默认设置,也配置了testng的测试结果报告插件, 当Jenkins构建执行后,也可以正常找到指定的pom.xml文件,并执行Maven命令mvn test -PmyTe...

python012的专栏 4601

ant+junit 测试一

ant junit 测试报告

Tarzan的博客 732

单元自动化测试(含junit)

junit3单元自动化测试详细解释,包括断言等基本知识。

jenkins邮件插件 emailext-template

jenkins的邮件扩展插件,该插件能允许你自定义邮件通知的方方面面,比如在发送邮件时你可以自定义发送给谁,发送具体什么内容等等

Jenkins:(看起来挺好看的)邮件模板样式

Jenkins 邮件模板样式目录导航:邮件模板样式一【根据样式三改编】邮件模板样式二邮件模板样式三邮件模板样式四 邮件模板样式一【根据样式三改编】 <!-- ####### YAY, I AM THE SOURCE EDITOR! #########--> <body> <head> <STYLE TYPE="text/css"> BODY { // 设置背景图片,删除此项

J_____Q的博客 4728

5G NR切换测量事件解析:从A1到B2的实战应用指南

本文深入解析5G NR切换测量事件,从A1到B2的实战应用指南。详细介绍了系统内切换事件(A1-A6)和系统间切换事件(B1-B2)的触发条件与配置建议,帮助优化网络性能。通过实际案例分享,展示如何调整参数提升切换成功率和降低乒乓切换率,适用于5G网络优化工程师。

tcp8optimizer的博客 512

Jenkins邮件设置

前言 最近搭建Maven+Testng+jenkins的持续集成环境,希望最后实现自动邮件运行结果报告,结果设置就费了两天时间(还没实现预期效果),记录下过程分享给需要的人。文章部分内容摘录自网络博客,部分来自官网翻译。 jenkins 内置了邮件功能,就是邮件通知, 由于它的功能太过单一无法满足需要;于是扩展插件就诞生了;文章中这两个邮件的配置都会介绍到。 内置邮件的配置与...

ahui456321的博客 407

Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)

本文介绍如何使用Python自动化工具在3分钟内将微信收藏链接批量导出到TXT文件。通过模拟人类操作和OCR技术,脚本高效处理大量链接,显著提升工作效率,并附有完整代码和实战避坑指南。

weixin_29062671的博客 628

Silvaco 学习笔记——物理模型:载流子产生复合模型

对载流子的复合机制进行总结

reactortiger的博客 1万+

Jenkins邮件模板

【代码】Jenkins邮件模板。

dugumona的博客 457

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南

在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通

weixin_33984032的博客 455

email-ext-plugin高级用法

1.定义Default Content,支持html和template两种格式i.html格式把脚本直接拷贝到Default Content中;ii.使用绝度路径查找:${FILE,path="/home/xxx/Desktop/developer/tools/email-ext-plugin/src/main/resources/hudson/plugins/emailext/templates...

NFTercel的博客空间 1666

Easymesh之拓扑模块(二)

介绍 easymesh 拓扑消息:Topo discovery、Topo notification、Topo query、Topo response

qq_53619687的博客 2152

导数在工程与AI中的12个实战应用解析

导数作为数学中的基本概念,本质是描述变化率的工具,其核心价值在于将非线性问题局部线性化处理。从原理上看,通过极限过程捕捉函数瞬时变化特性,使工程师能精确控制系统动态行为,帮助科学家量化自然规律变化速率。在技术实现层面,现代符号计算(如Mathematica)、数值计算(如MATLAB)和自动微分(如PyTorch)工具链的发展,大幅提升了导数计算的效率与精度。典型应用场景涵盖机械控制(如ABS防抱死系统)、金融工程(如期权希腊值计算)、医疗影像(如Canny边缘检测)等领域。特别在机器学习中,反向传播算法依

weixin_35509395的博客 316

用Ant编译、junit测试、生成测试报告、最终自动发mail

测试通过的版本如下:Eclipse:3.3.2jdk:1.6junit:3.8ant:1.7(1.7之前的版本好像还不提供mail功能。。。)&lt;!-- JUnit build script using ant 1.7 --&gt;&lt;project name="JunitTestProject" default="mail" basedir="."&gt;&lt;property nam...

daniel_tu的专栏 584

TC8:SOMEIPSRV_SD_MESSAGE_07-09

TTL为服务实例的生命周期。在此生命周期之后,不提供服务实例。

jasonj333 908

jenkins配置邮件及增强版邮件通知

环境 jenkins:2.5 操作系统:win7 服务器:centos6 工具:CRT 需求 这个月有那么一次jenkins在自动升级(SCM)时失败了,那时刚好晚上7点,直到第二天早上有人点击时,才意识到升级失败,所以想想,我还是配置下构建失败的邮件通知吧! 安装插件 Email Extension Plugin (安装插件,我喜欢先去下载hpi文件,然后再去手动安装) ...

山鬼谣的专栏 6万+

Debezium 性能调优实战:吞吐量、延迟与资源平衡

摘要: 本文分享了团队如何通过系统性调优将Debezium从初始3,200 TPS/2.8秒延迟提升至15,200 TPS/210ms延迟的实战经验。优化涵盖四个层面:1)Debezium连接器配置(批处理、快照并行、消息精简);2)Kafka分区策略与Avro序列化缓存;3)JVM改用ZGC及OS参数调优;4)MySQL的binlog与I/O优化。关键发现包括分区数黄金公式、sync_binlog调整带来56%的I/O负载下降,以及避免盲目增大队列内存等陷阱。最终实现吞吐量提升4.75倍,并强调性能调优需

爱丹丹的博客 358

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

一个比较好看的Jenkins邮件内容模板

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head> <body leftmargin="...

weixin_30877493的博客 1251

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

八、junit接口自动化框架-钉钉发送报告

思路: 执行完case后,通过钉钉来发送运行case的结果。也是通过打标签的方式实现。

喵酱 907

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TestNG+Maven+ExtentReports在Jenkins中的测试报告出坑记(四):测试报告邮件内容实用化与美化解决方案

好了,现在让Jenkins开跑吧,一切似乎都还不错。但是,看到收到的邮件,觉得又不好了。默认情况下,收到的测试结果邮件内容如下: 这样的内容确实有点少,如果能把测试过程展示出来不是更好么?还有不太美观啊,所以得想办法优化下。 首先要做的就是在Jenkins中安装上Email Extension插件,通过设置该插件可以满足绝大多数常见的email相关的需求。 安装好之后,就开始配置这个插件...

1093

Jenkins集成TestNG Junit自动化测试

自动化测试是Jenkins持续集成和部署的又一核心价值体现,我们先来做一个基于Junit 的 TestNG 测试。我们的实现步骤是:1、在Jenkins上安装xUnit插件;2、在Eclipse上安装TestNG插件;3、编写Junit测试及TestNG.xml配置。另外除了Junit测试还有模拟浏览器测试的Selenium测试。

纸上得来终觉浅,绝知此事要躬行 2万+
上一篇: MS UI Automation简介
下一篇: Hudson/Jenkins--如何自定义build name
ffeiffei
博客等级 码龄16年 36粉丝 29原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值