利用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
原创粉丝点击