• ANT+JMETER集成


    一.ant安装

    环境准备:

    1.安装jdk

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

    注意:最好与jmeter绿色版中自带的jdk版本一致,可以把jdk改成jmeter中自带的jdk(修改环境变量JAVA_HOME)

    2.下载ant

    http://ant.apache.org/bindownload.cgi

    配置ant环境变量,这里不说了

     

    输入:ant -v  出现以下,表示安装成功

    二.安装遇到的问题

    输入 ant -v 后一直报错,如下

    Exception in thread “main" java.lang.UnsupportedClassVersionError

    后来发现是ant版本太新了,本机不支持1.10.1版本,换了一个1.9.7的版本就好了

    三.ant+jmeter实现批量执行jmter脚本

    准备:

    1.jmeter脚本准备(不说了)

    2.新建一个demo,把jmx脚本放进去

    3.在demo下新建目录resultLog,log下新建两个子目录html,jtl

    4.将 jmeter的extras目录中ant-jmeter-1.1.1.jar包拷贝至ant安装目录下的lib目录中

    5.修改Jmeter的bin目录下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml 

    html:存放生成的html报告

    jtl:存放生成的jtl报告

    build.xml配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project name="ant-jmeter-test" default="run" basedir=".">
     3  <taskdef resource="net/sf/antcontrib/antlib.xml" />
     4  <!-- (1)需要改成自己本地的 Jmeter 目录-->
     5 <property name="jmeter.home" value="C:UsersAdministratorDesktopapache-jmeter-3.0"/>
     6 <property name="report.title" value="report"/>
     7 <!-- (2)jmeter生成jtl格式的结果报告的路径-->
     8 <property name="jmeter.result.jtl.dir" value="C:UsersAdministratorDesktopapache-jmeter-3.0demo
    esultLogjtl"/>
     9 <!-- (3)jmeter生成html格式的结果报告的路径-->
    10 <property name="jmeter.result.html.dir" value="C:UsersAdministratorDesktopapache-jmeter-3.0demo
    esultLoghtml"/>
    11 <!-- 生成的报告的前缀 -->
    12 <property name="ReportName" value="TestReport"/>
    13 <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl"/>
    14 <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html"/>
    15 
    16 <target name="run"> 
    17   <antcall target="test"/>  
    18   <antcall target="report"/> 
    19   <!--antcall  target="mail"/-->    
    20 </target>
    21 <target name="test"> 
    22   <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>  
    23   <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 
    24   <!-- (4)build.xml的存放的路径-->
    25     <testplans dir="C:UsersAdministratorDesktopapache-jmeter-3.0demo" includes="*.jmx"/>  
    26     <property name="jmeter.save.saveservice.output_format" value="xml"/> 
    27   </jmeter> 
    28 </target>
    29 <path id="xslt.classpath"> 
    30   <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>  
    31   <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> 
    32 </path>
    33 <target name="report"> 
    34   <tstamp> 
    35     <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>
    36   </tstamp>  
    37   <xslt 
    38   classpathref="xslt.classpath" 
    39   force="true" 
    40   in="${jmeter.result.jtlName}"
    41   out="${jmeter.result.htmlName}"
    42   style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"> 
    43     <param name="dateReport" expression="${report.datestamp}"/> 
    44   </xslt>  
    45 
    46   <copy todir="${jmeter.result.html.dir}"> 
    47     <fileset dir="${jmeter.home}/extras"> 
    48       <include name="collapse.png"/>  
    49       <include name="expand.png"/> 
    50     </fileset> 
    51   </copy> 
    52 </target>
    53  <path id="lib_classpath">
    54         <fileset dir="${basedir}/">
    55             <include name="mail*.jar" />
    56             <include name="activation*.jar" />
    57             <include name="commons-email*.jar" />
    58             <include name="ant-contrib*.jar" />
    59         </fileset>
    60  </path>
    61     <!--target name="mail">
    62         <for list="hanxm@thunisoft.com" param="tmp" >
    63             <sequential>
    64               <echo>message @{tmp}</echo> 
    65                 <mail mailhost="smtp.thunisoft.com" mailport="25" ssl="false" subject="ant mail" messagemimetype="text/html" user="zhangjn" password="*******"  tolist="@{tmp}">
    66                     <from address="zhangjn@thunisoft.com" />
    67                     <fileset dir="${jmeter.result.html.dir}">
    68                        <include name="*.html" />
    69                        <include name="*.png" />
    70                       </fileset>
    71                     <message>支持多人同时发邮件!!&lt;br /&gt;&lt;br /&gt;</message>
    72                 </mail>
    73             </sequential>
    74         </for>
    75     </target-->
    76 </project>
    build.xml

    1.修改build.xml中的(1)(2)(3)(4)(5)的路径为自己的响应的路径

    2.将build.xml中的第42行

    style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">

    拷贝以下内容将这个路径下的jmeter-results-detail-report_21.xsl文件覆盖,这个文件说明了xsl文件装换为html文件的一些规则

      1 <?xml version="1.0"?>
      2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      3 
      4 <!--
      5    Licensed to the Apache Software Foundation (ASF) under one or more
      6    contributor license agreements.  See the NOTICE file distributed with
      7    this work for additional information regarding copyright ownership.
      8    The ASF licenses this file to You under the Apache License, Version 2.0
      9    (the "License"); you may not use this file except in compliance with
     10    the License.  You may obtain a copy of the License at
     11  
     12        http://www.apache.org/licenses/LICENSE-2.0
     13  
     14    Unless required by applicable law or agreed to in writing, software
     15    distributed under the License is distributed on an "AS IS" BASIS,
     16    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     17    See the License for the specific language governing permissions and
     18    limitations under the License.
     19 -->
     20 
     21 <!-- 
     22     Stylesheet for processing 2.1 output format test result files 
     23     To uses this directly in a browser, add the following to the JTL file as line 2:
     24     <?xml-stylesheet type="text/xsl" href="../extras/jmeter-results-detail-report_21.xsl"?>
     25     and you can then view the JTL in a browser
     26 -->
     27 
     28 <xsl:output method="html" indent="yes" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
     29 
     30 <!-- Defined parameters (overrideable) -->
     31 <xsl:param    name="showData" select="'n'"/>
     32 <xsl:param    name="titleReport" select="'Load Test Results'"/>
     33 <xsl:param    name="dateReport" select="'date not defined'"/>
     34 
     35 <xsl:template match="testResults">
     36     <html>
     37         <head>
     38             <title><xsl:value-of select="$titleReport" /></title>
     39             <style type="text/css">
     40                 body {
     41                     font:normal 68% verdana,arial,helvetica;
     42                     color:#000000;
     43                 }
     44                 table tr td, table tr th {
     45                     font-size: 68%;
     46                 }
     47                 table.details tr th{
     48                     color: #ffffff;
     49                     font-weight: bold;
     50                     text-align:center;
     51                     background:#2674a6;
     52                     white-space: nowrap;
     53                 }
     54                 table.details tr td{
     55                     background:#eeeee0;
     56                     white-space: nowrap;
     57                 }
     58                 h1 {
     59                     margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
     60                 }
     61                 h2 {
     62                     margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
     63                 }
     64                 h3 {
     65                     margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
     66                 }
     67                 .Failure {
     68                     font-weight:bold; color:red;
     69                 }
     70                 
     71     
     72                 img
     73                 {
     74                   border- 0px;
     75                 }
     76                 
     77                 .expand_link
     78                 {
     79                    position=absolute;
     80                    right: 0px;
     81                     27px;
     82                    top: 1px;
     83                    height: 27px;
     84                 }
     85                 
     86                 .page_details
     87                 {
     88                    display: none;
     89                 }
     90                                 
     91                                 .page_details_expanded
     92                                 {
     93                                     display: block;
     94                                     display/* hide this definition from  IE5/6 */: table-row;
     95                                 }
     96 
     97 
     98             </style>
     99             <script language="JavaScript"><![CDATA[
    100                            function expand(details_id)
    101                {
    102                   
    103                   document.getElementById(details_id).className = "page_details_expanded";
    104                }
    105                
    106                function collapse(details_id)
    107                {
    108                   
    109                   document.getElementById(details_id).className = "page_details";
    110                }
    111                
    112                function change(details_id)
    113                {
    114                   if(document.getElementById(details_id+"_image").src.match("expand"))
    115                   {
    116                      document.getElementById(details_id+"_image").src = "collapse.png";
    117                      expand(details_id);
    118                   }
    119                   else
    120                   {
    121                      document.getElementById(details_id+"_image").src = "expand.png";
    122                      collapse(details_id);
    123                   } 
    124                            }
    125             ]]></script>
    126         </head>
    127         <body>
    128         
    129             <xsl:call-template name="pageHeader" />
    130             
    131             <xsl:call-template name="summary" />
    132             <hr size="1" width="95%" align="center" />
    133             
    134             <xsl:call-template name="pagelist" />
    135             <hr size="1" width="95%" align="center" />
    136             
    137             <xsl:call-template name="detail" />
    138 
    139         </body>
    140     </html>
    141 </xsl:template>
    142 
    143 <xsl:template name="pageHeader">
    144     <h1><xsl:value-of select="$titleReport" /></h1>
    145     <table width="100%">
    146         <tr>
    147             <td align="left">Date report: <xsl:value-of select="$dateReport" /></td>
    148             <td align="right">Designed for use with <a href="http://jmeter.apache.org/">JMeter</a> and <a href="http://ant.apache.org">Ant</a>.</td>
    149         </tr>
    150     </table>
    151     <hr size="1" />
    152 </xsl:template>
    153 
    154 <xsl:template name="summary">
    155     <h2>Summary</h2>
    156     <table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
    157         <tr valign="top">
    158             <th># Samples</th>
    159             <th>Failures</th>
    160             <th>Success Rate</th>
    161             <th>Average Time</th>
    162             <th>Min Time</th>
    163             <th>Max Time</th>
    164         </tr>
    165         <tr valign="top">
    166             <xsl:variable name="allCount" select="count(/testResults/*)" />
    167             <xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s='false'])" />
    168             <xsl:variable name="allSuccessCount" select="count(/testResults/*[attribute::s='true'])" />
    169             <xsl:variable name="allSuccessPercent" select="$allSuccessCount div $allCount" />
    170             <xsl:variable name="allTotalTime" select="sum(/testResults/*/@t)" />
    171             <xsl:variable name="allAverageTime" select="$allTotalTime div $allCount" />
    172             <xsl:variable name="allMinTime">
    173                 <xsl:call-template name="min">
    174                     <xsl:with-param name="nodes" select="/testResults/*/@t" />
    175                 </xsl:call-template>
    176             </xsl:variable>
    177             <xsl:variable name="allMaxTime">
    178                 <xsl:call-template name="max">
    179                     <xsl:with-param name="nodes" select="/testResults/*/@t" />
    180                 </xsl:call-template>
    181             </xsl:variable>
    182             <xsl:attribute name="class">
    183                 <xsl:choose>
    184                     <xsl:when test="$allFailureCount &gt; 0">Failure</xsl:when>
    185                 </xsl:choose>
    186             </xsl:attribute>
    187             <td align="center">
    188                 <xsl:value-of select="$allCount" />
    189             </td>
    190             <td align="center">
    191                 <xsl:value-of select="$allFailureCount" />
    192             </td>
    193             <td align="center">
    194                 <xsl:call-template name="display-percent">
    195                     <xsl:with-param name="value" select="$allSuccessPercent" />
    196                 </xsl:call-template>
    197             </td>
    198             <td align="center">
    199                 <xsl:call-template name="display-time">
    200                     <xsl:with-param name="value" select="$allAverageTime" />
    201                 </xsl:call-template>
    202             </td>
    203             <td align="center">
    204                 <xsl:call-template name="display-time">
    205                     <xsl:with-param name="value" select="$allMinTime" />
    206                 </xsl:call-template>
    207             </td>
    208             <td align="center">
    209                 <xsl:call-template name="display-time">
    210                     <xsl:with-param name="value" select="$allMaxTime" />
    211                 </xsl:call-template>
    212             </td>
    213         </tr>
    214     </table>
    215 </xsl:template>
    216 
    217 <xsl:template name="pagelist">
    218     <h2>Pages</h2>
    219     <table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
    220         <tr valign="top">
    221             <th>URL</th>
    222             <th># Samples</th>
    223             <th>Failures</th>
    224             <th>Success Rate</th>
    225             <th>Average Time</th>
    226             <th>Min Time</th>
    227             <th>Max Time</th>
    228             <th></th>
    229         </tr>
    230         <xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]">
    231             <xsl:variable name="label" select="@lb" />
    232             <xsl:variable name="count" select="count(../*[@lb = current()/@lb])" />
    233             <xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s='false'])" />
    234             <xsl:variable name="successCount" select="count(../*[@lb = current()/@lb][attribute::s='true'])" />
    235             <xsl:variable name="successPercent" select="$successCount div $count" />
    236             <xsl:variable name="totalTime" select="sum(../*[@lb = current()/@lb]/@t)" />
    237             <xsl:variable name="averageTime" select="$totalTime div $count" />
    238             <xsl:variable name="minTime">
    239                 <xsl:call-template name="min">
    240                     <xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" />
    241                 </xsl:call-template>
    242             </xsl:variable>
    243             <xsl:variable name="maxTime">
    244                 <xsl:call-template name="max">
    245                     <xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" />
    246                 </xsl:call-template>
    247             </xsl:variable>
    248             <tr valign="top">
    249                 <xsl:attribute name="class">
    250                     <xsl:choose>
    251                         <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
    252                     </xsl:choose>
    253                 </xsl:attribute>
    254                 <td>
    255                 <xsl:if test="$failureCount > 0">
    256                   <a><xsl:attribute name="href">#<xsl:value-of select="$label" /></xsl:attribute>
    257                   <xsl:value-of select="$label" />
    258                   </a>
    259                 </xsl:if>
    260                 <xsl:if test="0 >= $failureCount">
    261                   <xsl:value-of select="$label" />
    262                 </xsl:if>
    263                 </td>
    264                 <td align="center">
    265                     <xsl:value-of select="$count" />
    266                 </td>
    267                 <td align="center">
    268                     <xsl:value-of select="$failureCount" />
    269                 </td>
    270                 <td align="right">
    271                     <xsl:call-template name="display-percent">
    272                         <xsl:with-param name="value" select="$successPercent" />
    273                     </xsl:call-template>
    274                 </td>
    275                 <td align="right">
    276                     <xsl:call-template name="display-time">
    277                         <xsl:with-param name="value" select="$averageTime" />
    278                     </xsl:call-template>
    279                 </td>
    280                 <td align="right">
    281                     <xsl:call-template name="display-time">
    282                         <xsl:with-param name="value" select="$minTime" />
    283                     </xsl:call-template>
    284                 </td>
    285                 <td align="right">
    286                     <xsl:call-template name="display-time">
    287                         <xsl:with-param name="value" select="$maxTime" />
    288                     </xsl:call-template>
    289                 </td>
    290                 <td align="center">
    291                    <a href="">
    292                       <xsl:attribute name="href"><xsl:text/>javascript:change('page_details_<xsl:value-of select="position()" />')</xsl:attribute>
    293                       <img src="expand.png" alt="expand/collapse"><xsl:attribute name="id"><xsl:text/>page_details_<xsl:value-of select="position()" />_image</xsl:attribute></img>                      
    294                    </a>
    295                 </td>
    296             </tr>
    297             
    298                         <tr class="page_details">
    299                            <xsl:attribute name="id"><xsl:text/>page_details_<xsl:value-of select="position()" /></xsl:attribute>
    300                            <td colspan="8" bgcolor="#FF0000">
    301                               <div align="center">
    302                      <b>Details for Page "<xsl:value-of select="$label" />"</b>
    303                      <table bordercolor="#000000" bgcolor="#2674A6" border="0"  cellpadding="1" cellspacing="1" width="95%">
    304                      <tr>
    305                         <th>Thread</th>
    306                         <th>Iteration</th>
    307                         <th>Time (milliseconds)</th>
    308                         <th>Bytes</th>
    309                         <th>Success</th>
    310                      </tr>
    311                                       
    312                      <xsl:for-each select="../*[@lb = $label and @tn != $label]">                                             
    313                         <tr>
    314                            <td><xsl:value-of select="@tn" /></td>
    315                            <td align="center"><xsl:value-of select="position()" /></td>
    316                            <td align="right"><xsl:value-of select="@t" /></td>
    317                            <!--  TODO allow for missing bytes field -->
    318                            <td align="right"><xsl:value-of select="@by" /></td>
    319                            <td align="center"><xsl:value-of select="@s" /></td>
    320                         </tr>
    321                      </xsl:for-each>
    322                      
    323                      </table>
    324                   </div>
    325                            </td>
    326                         </tr>
    327             
    328         </xsl:for-each>
    329     </table>
    330 </xsl:template>
    331 
    332 <xsl:template name="detail">
    333     <xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s='false'])" />
    334 
    335     <xsl:if test="$allFailureCount > 0">
    336         <h2>Failure Detail</h2>
    337 
    338         <xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]">
    339 
    340             <xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s='false'])" />
    341 
    342             <xsl:if test="$failureCount > 0">
    343                 <h3><xsl:value-of select="@lb" /><a><xsl:attribute name="name"><xsl:value-of select="@lb" /></xsl:attribute></a></h3>
    344 
    345                 <table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
    346                 <tr valign="top">
    347                     <th>Response</th>
    348                     <th>Failure Message</th>
    349                     <xsl:if test="$showData = 'y'">
    350                        <th>Response Data</th>
    351                     </xsl:if>
    352                 </tr>
    353             
    354                 <xsl:for-each select="/testResults/*[@lb = current()/@lb][attribute::s='false']">
    355                     <tr>
    356                         <td><xsl:value-of select="@rc | @rs" /> - <xsl:value-of select="@rm" /></td>
    357                         <td><xsl:value-of select="assertionResult/failureMessage" /></td>
    358                         <xsl:if test="$showData = 'y'">
    359                             <td><xsl:value-of select="./binary" /></td>
    360                         </xsl:if>
    361                     </tr>
    362                 </xsl:for-each>
    363                 
    364                 </table>
    365             </xsl:if>
    366 
    367         </xsl:for-each>
    368     </xsl:if>
    369 </xsl:template>
    370 
    371 <xsl:template name="min">
    372     <xsl:param name="nodes" select="/.." />
    373     <xsl:choose>
    374         <xsl:when test="not($nodes)">NaN</xsl:when>
    375         <xsl:otherwise>
    376             <xsl:for-each select="$nodes">
    377                 <xsl:sort data-type="number" />
    378                 <xsl:if test="position() = 1">
    379                     <xsl:value-of select="number(.)" />
    380                 </xsl:if>
    381             </xsl:for-each>
    382         </xsl:otherwise>
    383     </xsl:choose>
    384 </xsl:template>
    385 
    386 <xsl:template name="max">
    387     <xsl:param name="nodes" select="/.." />
    388     <xsl:choose>
    389         <xsl:when test="not($nodes)">NaN</xsl:when>
    390         <xsl:otherwise>
    391             <xsl:for-each select="$nodes">
    392                 <xsl:sort data-type="number" order="descending" />
    393                 <xsl:if test="position() = 1">
    394                     <xsl:value-of select="number(.)" />
    395                 </xsl:if>
    396             </xsl:for-each>
    397         </xsl:otherwise>
    398     </xsl:choose>
    399 </xsl:template>
    400 
    401 <xsl:template name="display-percent">
    402     <xsl:param name="value" />
    403     <xsl:value-of select="format-number($value,'0.00%')" />
    404 </xsl:template>
    405 
    406 <xsl:template name="display-time">
    407     <xsl:param name="value" />
    408     <xsl:value-of select="format-number($value,'0 ms')" />
    409 </xsl:template>
    410     
    411 </xsl:stylesheet>

    执行:

    切换到build.xml路径,执行ant命令,当出现如下字样表示执行成功

    查看报告:

    1.在demo esultLoghtml路径下查看html报告如下

  • 相关阅读:
    MOSS 搜索服务,内容源无法停止的错误
    在服务器场中安装moss sp1
    基于CodeSmith代码生成之数据访问层
    IMVSynchronization接口说明
    [Best Practice]WSPBuilder和QuickPart合作进行Web Partk可视化开发与部署的好方法
    vs2008快捷键生成
    转帖:vs2008使用jquery智能提示
    [Best Practice]如何在SharePoint团队开发中利用WSPBuilder
    规划备用访问映射 (Windows SharePoint Services)
    转帖:[Best Practice]如何在SharePoint团队开发中利用WSPBuilder
  • 原文地址:https://www.cnblogs.com/hanxiaomin/p/6731810.html
Copyright © 2020-2023  润新知