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

Halcon实战:基于图像清晰度自动筛选最佳对焦图片

本文详细介绍了如何使用Halcon实现基于图像清晰度的自动筛选最佳对焦图片技术。通过分析灰度值统计和标准差等核心指标,结合实战代码示例,帮助开发者高效处理工业检测中的对焦问题,提升自动化检测的准确性和效率。

weixin_27015733的博客 439

Jenkins邮件设置

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

ahui456321的博客 407

BAPI创建委外采购订单

使用BAPI BAPI_PO_CREATE1创建委外采购订单,组件为手工输入时,有几个点需要注意: 1、已通过CS01创建过BOM的物料,创建时会自动带出components。如果要修改当前组件清单,可以通过设置pocomponents-change_id = 'E’来实现 lv_sline = lv_sline + 1. ls_pocomponents-po_item = l_ebelp + 10. ls_pocomponents-ITEM_NO = l

Buffalo_soldier的博客 3260

lgv20刷twrp_LG港版v20 root

这是LG港版v20 root,整理了一下有关LG港版v20的官方固件包了,有没有需要的呢,这里把固件包整理一下也是方便大家以后好下载了,因此有一些机友还是不知道在哪里下载官方的rom包,在这里说的固件rom包也就是原版的系统包了,大家可以放心的使用,这些系统包也都是支持线刷的,大家下载下来解压出来根据里面的相关教程来操作就可以了,很简单的,如果你也需要的话就一起来看看吧。软件提示注意!! 此过程会...

weixin_33212263的博客 5387

Jenkins邮件模板

【代码】Jenkins邮件模板。

dugumona的博客 457

基于STM32的家庭环境监测毕业设计(全部资料)

本文设计并实现了一套基于STM32的家庭环境监测系统,具备温湿度、烟雾浓度和PM2.5检测功能,通过OLED屏实时显示数据,并能自动或手动控制风扇、加湿器等设备。系统采用分层架构设计,包含数据采集、处理、显示和控制执行模块,经测试性能稳定可靠。研究结果表明,该系统能有效提升家庭环境监测与控制的智能化水平,但仍存在传感器精度和智能化程度不足等问题,未来可进一步优化硬件配置并引入AI算法提升性能。

3254968421的博客 461

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

2026.3.10:最新claude code完美解决方案,跳过登录界面,使用国内deepseek-v4-pro进行计费

本文介绍了一种绕过Claude登录界面直接使用国内DeepSeek-V4-Pro服务的解决方案。通过npm全局安装@anthropic-ai/claude-code包,并配置5个关键环境变量:API认证令牌、基础URL(指向DeepSeek服务)、指定模型为deepseek-v4-pro、禁用非必要流量等。文中提供了4张配图辅助说明配置过程,但未展示具体内容。该方案可实现直接计费使用,无需通过官方登录流程。

拥抱具身智能,昇腾Ascend C 6502

C++程序无法正常启动(报0xc000007b错误)问题的详细排查

本文详细介绍了应用程序启动时遇到0xC000007B错误的排查过程。问题源于32位程序与64位运行时库的不匹配,以及缺少依赖的运行时库。通过分析系统日志、使用Windbg和检查程序位数,最终确定问题在于32位程序误引用了64位系统目录下的库文件。

dvlinker的技术专栏 1万+

用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

数字人(对嘴型 Lip-sync)数据集 LRS2 介绍(含网盘链接)

LRS2(Lip Reading Sentences 2)是牛津大学与BBC合作开发的一个大规模唇语识别数据集,专门用于训练和评估数字人唇语同步(Lip-sync)技术。该数据集包含数千条来自BBC电视节目的口语句子,每个句子长度最多100个字符。官方网站为:https://www.robots.ox.ac.uk/~vgg/data/lip_reading/lrs2.html可惜需要认证,不过我已经下载好并存到网盘里了,有需要可适用如下链接下载。(仅供学习,请勿传播)

iioSnail的博客 1685

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

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

山鬼谣的专栏 6万+

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4453

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

weixin_30877493的博客 1251

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

喵酱 907

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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、付费专栏及课程。

余额充值