1、Editable Email Notification中的   Default Content 填写以下内容:

<!DOCTYPE html>  <html>  <head>  <meta http-equiv="Content-Type" content=text/html; charset="UTF-8>  <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次测试执行日志</title>  </head>  <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"  offset="0">  <table width="95%" cellpadding="0" cellspacing="0"  style="font-size: 14pt; font-family: Microsoft Yahei,Tahoma, Arial, Helvetica, sans-serif">  <tr>  <td><br />  <b><font color="#000079">自动化测试概要</font></b>  <hr size="2" width="100%" align="center" /></td>  </tr>  <tr>  <td>  <ul>  <li>项目名称 : ${PROJECT_NAME}</li>  <li>触发原因: ${CAUSE}</li>      </ul>  </td>  </tr>  </table>  </body>  </html>${FILE, path="reportLog/html//APITest.html"}

其中

${FILE, path="reportLog/html//APITest.html"}

这句话是将测试报告以附件的形式显示在邮件中。

2、build.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="JmeterTest" default="all" basedir="."><tstamp><format property="time" pattern="yyyyMMddHHmm" /></tstamp><!-- 需要改成自己本地的 Jmeter 目录-->  <property name="jmeter.home" value="F:\testsoft\apache-jmeter-3.0" /><!-- jmeter生成jtl格式的结果报告的路径--><property name="jmeter.result.jtl.dir" value="F:\testsoft\apache-jmeter-3.0\extras\reportLog\jtl" /><!-- jmeter生成html格式的结果报告的路径--><property name="jmeter.result.html.dir" value="F:\testsoft\apache-jmeter-3.0\extras\reportLog\html" /><!-- jmeter生成html格式的历史结果报告的路径--><property name="jmeter.result.html.historydir" value="F:\testsoft\apache-jmeter-3.0\extras\reportLog\historyhtml" /><!-- 生成的报告的前缀--><property name="ReportName" value="APITest" /><property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /><property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" /><property name="ComputerName" value="dell" /><target name="all"><antcall target="test" /><antcall target="report" /></target><target name="test"><taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /><jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"><!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本--><testplans dir="F:\testsoft\script" includes="*.jmx" /><property name="jmeter.save.saveservice.output_format" value="xml"/></jmeter></target><target name="report"><tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp><!--    <xsltclasspathref="xslt.classpath"force="true"in="${jmeter.result.jtlName}"out="${jmeter.result.htmlName}"style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"><param name="dateReport" expression="${report.datestamp}"/></xslt>--><xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_1.0.xsl" ><param name="dateReport" expression="${report.datestamp}"/></xslt><!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --><copy todir="${jmeter.result.html.dir}"><fileset dir="${jmeter.home}/extras"><include name="collapse.png" /><include name="expand.png" /></fileset></copy><!-- 将每天生成的测试报告按当前时间进行备份 --><copy tofile="${jmeter.result.html.dir}\${ReportName}${time}.html"><fileset dir="${jmeter.result.html.dir}"><include name="APITest.html" /></fileset></copy>       </target></project>

3、jmeter-results-detail-report_1.0.xsl 如下:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><!--Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements.  See the NOTICE file distributed withthis work for additional information regarding copyright ownership.The ASF licenses this file to You under the Apache License, Version 2.0(the "License"); you may not use this file except in compliance withthe License.  You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
--><!--Stylesheet for processing 2.1 output format test result filesTo uses this directly in a browser, add the following to the JTL file as line 2:<?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report_21.xsl"?>and you can then view the JTL in a browser
--><xsl:output method="html" indent="yes" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" /><!-- Defined parameters (overrideable)   <td bgcolor="#ff00ff">  -->
<xsl:param    name="showData" select="'y'"/>
<xsl:param    name="titleReport" select="'自动化测试结果'"/>
<xsl:param    name="dateReport" select="'date not defined'"/><xsl:template match="testResults"><html ><head><title><xsl:value-of select="$titleReport" /></title><style type="text/css">body {font:normal 90% Microsoft Yahei,Microsoft Yahei,verdana,arial,helvetica;color:#000000;}table tr td, table tr th {font-size: 75%;}table.details tr th{color: #ffffff;font-weight: bold;text-align:center;background:#2674a6;white-space: nowrap;}table.details tr td{background:#eeeee0;white-space: nowrap;}h1 {margin: 0px 0px 5px; font: 110% Microsoft Yahei,Microsoft Yahei,verdana,arial,helvetica}h2 {margin-top: 1em; margin-bottom: 0.5em; font: bold 100% Microsoft Yahei,Microsoft Yahei,verdana,arial,helvetica}h3 {margin-bottom: 0.5em; font: bold 100% Microsoft Yahei,Microsoft Yahei,verdana,arial,helvetica}.Failure {font-weight:bold; color:red;}img{border-width: 0px;}.expand_link{position=absolute;right: 0px;width: 27px;top: 1px;height: 27px;}.page_details{display: none;}.page_details_expanded{display: block;display/* hide this definition from  IE5/6 */: table-row;}</style><script language="JavaScript"><![CDATA[function expand(details_id){document.getElementById(details_id).className = "page_details_expanded";}function collapse(details_id){document.getElementById(details_id).className = "page_details";}function change(details_id){if(document.getElementById(details_id+"_image").src.match("expand")){document.getElementById(details_id+"_image").src = "collapse.png";expand(details_id);}else{document.getElementById(details_id+"_image").src = "expand.png";collapse(details_id);}}]]></script></head><body ><xsl:call-template name="pageHeader" /><xsl:call-template name="myresult" />    <xsl:call-template name="summary" /><hr size="1" width="75%" align="center" /><xsl:call-template name="pagelist" /><hr size="1" width="75%" align="center" /><xsl:call-template name="detail" /></body></html>
</xsl:template><xsl:template name="pageHeader"><h1><xsl:value-of select="$titleReport" /></h1><table width="100%"><tr><td align="left">Date report: <xsl:value-of select="$dateReport" /></td><td align="right">from lly</td></tr></table><hr size="1" />
</xsl:template><xsl:template name="myresult"><xsl:variable name="allFailCount" select="count(/testResults/*[attribute::s='false'])" /><xsl:if test="$allFailCount = '0'"><h2>测试结果:成功</h2>
</xsl:if>
<xsl:if test="$allFailCount > '0'"><h2  bgcolor="#ff00ff">测试结果:未完全通过</h2><h2  bgcolor="#ff00ff">失败个数:<xsl:value-of select="count(/testResults/*[attribute::s='false'])"/></h2></xsl:if>                    </xsl:template><xsl:template name="summary"><h2>报告概况</h2><table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%"><tr valign="top"><th>功能模块总数</th><th>失败数</th><th>成功率</th><th>平均响应时间</th></tr><tr valign="top"><xsl:variable name="allCount" select="count(/testResults/*)" /><xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s='false'])" /><xsl:variable name="allSuccessCount" select="count(/testResults/*[attribute::s='true'])" /><xsl:variable name="allSuccessPercent" select="$allSuccessCount div $allCount" /><xsl:variable name="allTotalTime" select="sum(/testResults/*/@t)" /><xsl:variable name="allAverageTime" select="$allTotalTime div $allCount" /><xsl:variable name="allMinTime"><xsl:call-template name="min"><xsl:with-param name="nodes" select="/testResults/*/@t" /></xsl:call-template></xsl:variable><xsl:variable name="allMaxTime"><xsl:call-template name="max"><xsl:with-param name="nodes" select="/testResults/*/@t" /></xsl:call-template></xsl:variable><xsl:attribute name="class"><xsl:choose><xsl:when test="$allFailureCount > 0">Failure</xsl:when></xsl:choose></xsl:attribute><td align="center"><xsl:value-of select="$allCount" /></td><td align="center"><xsl:value-of select="$allFailureCount" /></td><td align="center"><xsl:call-template name="display-percent"><xsl:with-param name="value" select="$allSuccessPercent" /></xsl:call-template></td><td align="center"><xsl:call-template name="display-time"><xsl:with-param name="value" select="$allAverageTime" /></xsl:call-template></td></tr></table>
</xsl:template><xsl:template name="pagelist"><h2>详细情况</h2><table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%"><tr valign="top"><th width="20%">功能模块</th><th>执行次数</th><th>失败数</th><th>成功率</th><th>实际响应时间</th></tr><xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]"><xsl:variable name="label" select="@lb" /><xsl:variable name="count" select="count(../*[@lb = current()/@lb])" /><xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s='false'])" /><xsl:variable name="successCount" select="count(../*[@lb = current()/@lb][attribute::s='true'])" /><xsl:variable name="successPercent" select="$successCount div $count" /><xsl:variable name="totalTime" select="sum(../*[@lb = current()/@lb]/@t)" /><xsl:variable name="averageTime" select="$totalTime div $count" /><xsl:variable name="minTime"><xsl:call-template name="min"><xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" /></xsl:call-template></xsl:variable><xsl:variable name="maxTime"><xsl:call-template name="max"><xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" /></xsl:call-template></xsl:variable><tr valign="top"><xsl:attribute name="class"><xsl:choose><xsl:when test="$failureCount > 0">Failure</xsl:when></xsl:choose></xsl:attribute><td><xsl:if test="$failureCount > 0"><a><xsl:attribute name="href">#<xsl:value-of select="$label" /></xsl:attribute><xsl:value-of select="$label" /></a></xsl:if><xsl:if test="0 >= $failureCount"><xsl:value-of select="$label" /></xsl:if></td><td align="center"><xsl:value-of select="$count" /></td><td align="center"><xsl:value-of select="$failureCount" /></td><td align="center"><xsl:call-template name="display-percent"><xsl:with-param name="value" select="$successPercent" /></xsl:call-template></td><td align="center"><xsl:call-template name="display-time"><xsl:with-param name="value" select="$averageTime" /></xsl:call-template></td></tr></xsl:for-each></table>
</xsl:template><xsl:template name="detail"><xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s='false'])" /><xsl:if test="$allFailureCount > 0"><h2>Failure Detail</h2><xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]"><xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s='false'])" /><xsl:if test="$failureCount > 0"><h3><xsl:value-of select="@lb" /><a><xsl:attribute name="name"><xsl:value-of select="@lb" /></xsl:attribute></a></h3><table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%"><tr valign="top"><th>响应</th><th>失败详细信息</th><xsl:if test="$showData = 'y'"><th>响应数据</th></xsl:if></tr><xsl:for-each select="/testResults/*[@lb = current()/@lb][attribute::s='false']"><tr><td><xsl:value-of select="@rc | @rs" /> - <xsl:value-of select="@rm" /></td><td><xsl:value-of select="assertionResult/failureMessage" /></td><xsl:if test="$showData = 'y'"><td><xsl:value-of select="responseData" /></td></xsl:if></tr></xsl:for-each></table></xsl:if></xsl:for-each></xsl:if>
</xsl:template><xsl:template name="min"><xsl:param name="nodes" select="/.." /><xsl:choose><xsl:when test="not($nodes)">NaN</xsl:when><xsl:otherwise><xsl:for-each select="$nodes"><xsl:sort data-type="number" /><xsl:if test="position() = 1"><xsl:value-of select="number(.)" /></xsl:if></xsl:for-each></xsl:otherwise></xsl:choose>
</xsl:template><xsl:template name="max"><xsl:param name="nodes" select="/.." /><xsl:choose><xsl:when test="not($nodes)">NaN</xsl:when><xsl:otherwise><xsl:for-each select="$nodes"><xsl:sort data-type="number" order="descending" /><xsl:if test="position() = 1"><xsl:value-of select="number(.)" /></xsl:if></xsl:for-each></xsl:otherwise></xsl:choose>
</xsl:template><xsl:template name="display-percent"><xsl:param name="value" /><xsl:value-of select="format-number($value,'0.00%')" />
</xsl:template><xsl:template name="display-time"><xsl:param name="value" /><xsl:value-of select="format-number($value,'0 ms')" />
</xsl:template></xsl:stylesheet>

4、预期效果如下:

利用jenkins发送测试报告模板相关推荐

  1. Jenkins发送测试报告邮件

    2019独角兽企业重金招聘Python工程师标准>>> 简介:总结怎么使用Jenkins执行自动化测试后发送测试报告邮件 一.系统设置 1.在Jenkins安装Email Exten ...

  2. jenkins发送allure测试报告附件

    参考地址: jenkins发送allure测试报告附件 - iread9527 - 博客园 jenkins发送邮件添加附件_语语嫣嫣-CSDN博客 window下jenkins+allure+邮箱发送 ...

  3. jenkins发送allure测试报告

    环境准备 在运行代码的服务器本机安装allure-pytest:pip install allure-pytest 安装jenkins的allure插件:打开jenkins首页-系统管理-管理插件-可 ...

  4. Jenkins+Allure测试报告+飞书机器人发送通知

    Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https ...

  5. python接口自动化(五)--接口测试用例和接口测试报告模板(详解)

    简介 当今社会在测试领域,接口测试已经越来越多的被提及,被重视,而且现在好多招聘信息要对接口测试提出要求.区别于传统意义上的系统级别测试,很多测试人员在接触到接口测试的时候,也许对测试执行还可以比较顺 ...

  6. python使用企业微信机器人发送测试报告

    自从企业微信添加了群机器人功能,我们现在使用机器人发送测试报告,最开始使用的是文本类型,但是感觉没有markdown的显示好看,索性就更换成了markdown类型的 官网上介绍的还可以发送图片和图文等 ...

  7. 20多份软件测试报告模板(标准版)一份优秀测试报告模板流程

    相信很多做软件测试的小伙伴在软件测试后期,都为软件测试报告总结花费了很多的精力,那么如何做好软件测试报告呢?一份优秀的测试报告又包含哪些内容呢? 测试报告的核心要素 一.测试结论 从测试工程师的专业角 ...

  8. 制度罚则--测试报告模板

    本文在研发组织管理中的位置: 研发组织管理--制度&罚则--测试报告模板 发送时机: 测试完成以后,上线以前. 邮件发送信息: 邮件标题:[测试报告] + 提测模块名称 邮件收件人:提测人,需 ...

  9. 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(二)

    本文接着上一篇记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配 打开HALCON并打开匹配助手 匹配助手如图 "创建"页说明: 1,选择匹配方式 中间偏上方的下拉 ...

最新文章

  1. Mysql遇到Too many connections的解决办法
  2. MIR6校验时移动平均价为负的原因及解决
  3. 大数据标签获取处理步骤_大数据处理分为哪些步骤
  4. 在asp.net中实现回车替代Tab键
  5. Windows Embedded CE 6.0开发初体验(四)跑个应用程序先
  6. 00600 ora 关闭oracle_Oracle集群高可用故障切换
  7. Membership学习(二)membership入门[xgluxv]
  8. Linux 文件内容替换命令
  9. JavaScript--Array; Array.prototype
  10. LeetCode(26): 删除排序数组中的重复项
  11. 生信-使用NCBI进行目的基因的引物设计
  12. webuploader多图片上传php,PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件...
  13. 2021年高压电工考试及高压电工考试资料
  14. 发票识别OCR和发票扫描仪
  15. DFS(深度优先搜索)和BFS(广度优先搜索)求迷宫路径问题的总结
  16. maximo 入门知识
  17. 计算内容热度的算法解释
  18. Call From xx/x.x.x.x .hdp1:9000:java.net.ConnectException:拒绝连接For m...see:http://wiki.apac..Refused
  19. 噪音测试标准:行业标准
  20. java核心技术卷I 第1-3章 笔记

热门文章

  1. ECharts y轴(yAxis)
  2. 字体反爬 -- 起点月票案例
  3. 高德纳(Donald Ervin Knuth):这位所有程序员心中的大神今天80岁了
  4. Java学习个人总结
  5. C++小游戏——俄罗斯方块
  6. 智慧城市与数字政府、城市大脑、一网统管之间什么关系
  7. java中的jsp文件创建_在JSP中创建文件夹和文件
  8. 牛视系统源码。抖音矩阵系统。抖音矩阵系统。
  9. 频率分布图和散点图SOP,R教程
  10. R语言简单的频数统计图