利用jenkins发送测试报告模板
来源:互联网 发布:python vps 编辑:程序博客网 时间:2024/06/06 18:48
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> <!-- <xslt classpathref="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 more contributor license agreements. See the NOTICE file distributed with this 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 with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed 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 and limitations under the License.--><!-- Stylesheet for processing 2.1 output format test result files To 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、预期效果如下:
0 0
- 利用jenkins发送测试报告模板
- Jenkins发送测试报告邮件
- Jenkins发送测试报告邮件
- Jenkins 发送附件测试报告邮件
- 测试报告模板
- 测试报告模板
- 测试报告模板
- jenkins集成测试报告
- Jenkins显示reportng测试报告
- jenkins junit测试报告生成
- 利用Freemarker模板发送邮件
- python发送邮件测试报告
- python发送邮件测试报告
- 整合测试报告邮件发送
- 系统测试报告模板
- 性能测试报告模板
- 存储测试报告模板1.0
- 我写的ant编译、打包、测试、测试报告生成和邮件发送模板
- CodeForces 760B Frodo and pillows
- 《Java编程思想》笔记 第一章
- 转自Xcode 8 Instruments 学习(二)
- 如何学好图像处理——从小白到大神?
- 【数据结构与算法】 Floyd算法
- 利用jenkins发送测试报告模板
- 历届习题 错误票据 (读入技巧,运行超时)
- hdu 还是畅通工程
- java基础09:面向对象描述
- bzoj1191: [HNOI2006]超级英雄Hero
- ubuntu下安装lxml
- DI v6.2,DI Governor在Linux下启动脚本startDIGovernor.sh编码格式问题导致启动失败
- 无法进入桌面you appear to be running an x server please exit x before installing
- 操作分区表对global和local索引的影响