码迷,mamicode.com
首页 > 其他好文 > 详细

Ant+JMeter集成

时间:2019-08-23 10:38:59      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:目录   run   ota   processor   display   force   ref   准备   实例   

实例一(不推荐)

1.Ant下载(https://ant.apache.org/bindownload.cgi),解压缩,配置环境变量(不配也可以,配了更方便一些)。

我这里下载的是apache-ant-1.10.5-bin.zip,在运行时需要Java8。(JDK8下载安装

Ant 环境变量配置:
计算机→属性→高级系统设置→高级→环境变量→系统变量;
新建“ANT_HOME”变量,变量值为:D:\software\apache-ant-1.10.5(根据ant的实际解压路径填写);
在path变量里添加变量值:%ANT_HOME%\bin;。

2.将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才能找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本。

3.jmeter默认保存的是.csv格式的文件,所以我们先要设置一下bin/jmeter.properties文件内容,保存。

jmeter.save.saveservice.output_format=xml

否则会报错:com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: 前言中不允许有内容。

4.提前准备一个测试脚本(手机号码归属地测试.jmx)并测试通过。

5.主要逻辑思路:运行D:\jemeterTest\script下面的.jmx脚本,生成.jtl文件放入 D:\jemeterTest\resultLog\jtl文件中,ant在将相应的文件转换为对应的html文件放入D:\jemeterTest\resultLog\html中。

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="D:\software\apache-jmeter-5.1" />
    <!-- jmeter生成jtl格式的结果报告的路径-->
    <property name="jmeter.result.jtl.dir" value="D:\jmeterTest\resultLog\jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="D:\jmeterTest\resultLog\html" />
    <!-- 生成的报告的前缀 -->
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
    <!-- 接收测试报告的邮箱 -->
    <property name="mail_to" value="hello@163.com" />
    <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="D:\jmeterTest\script" includes="*.jmx" />
        </jmeter>
    </target>
    <target name="report">
        <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>
    <!-- 发送邮件 -->
</project>

6.测试前(创建相应目录并将脚本和构建文件放入其中):

技术图片

7.命令行到build.xml所在的目录,ant,回车运行。

技术图片

8.测试后:

技术图片

浏览器打开HTML文件,显示正确(缺点是min time和max time没有值)

技术图片

打开jtl文件

技术图片

 

实例二(推荐)

上面的步骤有点乱,感觉不易于理解。后来我从书上发现,其实上面的2,3步骤完全可以在build.xml中配置好,完全不需要这么麻烦。下面是书上的例子,我稍加修改,更易于理解。

1.Ant下载,解压缩,配置环境变量。

2.提前准备一个测试脚本(手机号码归属地测试.jmx)并测试通过。

3.创建目录、构建文件及批处理文件。

技术图片

技术图片
<?xml version="1.0"?>
<project name="ant-jmeter" default="all">
    <description>
        Jmeter+Ant+Jenkins <!--文件描述,可选择项-->
    </description>
    
    <!--定义变量并赋值,能够减少配置工作量,后面会用到-->
    <!--定义JMeter的工作目录,与%JMETER_HOME%指向同一个目录-->
    <property name="jmeter.home" value="D:\software\apache-jmeter-5.1"/>
    
    <!--定义JMeter脚本存放目录-->
    <property name="script.dir" value="D:\jmeterTest\script"/>
    
    <!--定义JMeter的测试结果存放目录-->
    <property name="jmeter.result.dir" value="D:\jmeterTest\resultLog"/>
    
    <!--定义测试报告Title-->
    <property name="report.title" value="Performance Test Summary Report"/>

    <!--定义测试结果名称-->
    <property name="jmeter.result.name" value="Test"/>
    
    <!--测试报告中是否显示失败事务,n为不显示-->
    <property name="show-data" value="n"/>
    
    <!--定义样式版本,有更新时只需要修改此处即可,其他调用处不用更改-->
    <property name="format" value="2.1"/>
        
    <condition property="style_version" value="_21">
        <equals arg1="${format}" arg2="2.1"/>
    </condition>

    <condition property="funcMode">
        <equals arg1="${show-data}" arg2="y"/>
    </condition>
    
    <condition property="funcMode" value="false">
      <not>
        <equals arg1="${show-data}" arg2="y"/>
      </not>
    </condition>

    <!--定义依赖包目录-->
    <path id="jmeter.classpath">
        <fileset dir="${jmeter.home}\extras">
          <include name="ant-jmeter*.jar"/>
        </fileset>
    </path>

    <!--定义任务,即测试活动,依赖于ant-jmeter.jar包-->
    <taskdef
        name="jmeter"
        classpathref="jmeter.classpath"
        classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
    
    <!--定义任务,一个是run,即运行脚本,一个是report,即生成报告-->
    <target name="all" depends="run,report"/>

    <!--定义run任务-->
    <target name="run">
        <!--显示上面定义的${show-data}取值-->
        <echo>funcMode = ${funcMode}</echo>
        <!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值-->
        <delete file="${jmeter.result.dir}/${jmeter.result.name}.html"/>
        <!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值-->
        <delete file="${jmeter.result.dir}/${jmeter.result.name}.jtl"/>
        
        <jmeter
            jmeterhome="${jmeter.home}"
            jmeterproperties="${jmeter.home}/bin/jmeter.properties"
            
            resultlog="${jmeter.result.dir}/${jmeter.result.name}.jtl">

            <!-- 指定测试脚本。"*.jmx"指包含此目录下的所有jmeter脚本 -->
            <testplans dir="${script.dir}" includes="*.jmx" />
            
            <!--指定测试结果输出格式,在此指定的是xml,也可以指定成文本格式及CSV格式-->
            <!--先暂时指定成xml格式,后续会变换成文本格式-->
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
            <!--是否记录错误信息,上面已经定义了${funcMode}=n-->
            <property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
        </jmeter>
    </target>

    <!--定义依赖包目录-->
    <property name="lib.dir" value="${jmeter.home}/lib"/>

    <!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ -->
    <path id="xslt.classpath">
        <fileset dir="${lib.dir}" includes="xalan*.jar"/>
        <fileset dir="${lib.dir}" includes="serializer*.jar"/>
    </path>

    <!--定义report任务,此任务依赖于xslt-report,copy-images这2个任务-->
    <target name="report" depends="xslt-report,copy-images">
        <echo>Report generated at ${report.datestamp}</echo>
    </target>

    <!--xslt-report是使用xslt来把xml文件转换成Html格式来显示-->
    <!--_message_xalan 被xslt-report依赖,由它生成报告-->
    <target name="xslt-report" depends="_message_xalan">
        <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
        <!--in:将测试结果作为输入-->
        <!--style:xslt定义的模板文件地址-->
        <xslt
            classpathref="xslt.classpath"
            force="true"    
            in="${jmeter.result.dir}/${jmeter.result.name}.jtl"
            out="${jmeter.result.dir}/${jmeter.result.name}.html"
            style="${jmeter.home}/extras/jmeter-results-detail-report${style_version}.xsl">
            <param name="showData" expression="${show-data}"/>
            <param name="titleReport" expression="${report.title}"/>
            <param name="dateReport" expression="${report.datestamp}"/>
        </xslt>
    </target>

    <!--copy-images用来cpoy图片,xslt模板中的图片由copy-images任务copy到报告目录-->
    <target name="copy-images" depends="verify-images" unless="samepath">
        <!--生成Html报告时需要Copy图标到报告目录,expand.png展开图标,collapse.png收起图标-->
        <copy file="${jmeter.home}/extras/expand.png" tofile="${jmeter.result.dir}/expand.png"/>
        <copy file="${jmeter.home}/extras/collapse.png" tofile="${jmeter.result.dir}/collapse.png"/>
    </target>

    <target name="verify-images">
        <condition property="samepath">
                <equals arg1="${jmeter.result.dir}" arg2="${jmeter.home}/extras/" />
        </condition>
    </target>
    
    <!--检查依赖-->
    <condition property="xalan.present">
          <and>
              <!-- No need to check all jars; just check a few -->
            <available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
            <available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
          </and>
    </condition>

    <target name="_message_xalan" unless="xalan.present">
        <echo>Cannot find all xalan and/or serialiser jars</echo>
        <echo>The XSLT formatting may not work correctly.</echo>
        <echo>Check you have xalan and serializer jars in ${lib.dir}</echo>
    </target>

    <!--仅仅打印前面定义的变量的值,检查是否如你所愿,在定义变量时做调试用,可以去掉-->
    <echo>jmeter.home = ${jmeter.home}</echo>
</project>
build.xml
技术图片
%ANT_HOME%\bin\ant -f .\build.xml
run.bat

4.在命令行输入ant运行或者直接双击run.bat运行

技术图片
D:\jmeterTest>ant
Buildfile: D:\jmeterTest\build.xml
     [echo] jmeter.home = D:\software\apache-jmeter-5.1

run:
     [echo] funcMode = false
   [jmeter] Executing test plan: D:\jmeterTest\script\手机号码归属地测试.jmx
 D:\jmeterTest\resultLog\Test.jtl
   [jmeter] Creating summariser <summary>
   [jmeter] Created the tree successfully using D:\jmeterTest\script\手机号码
属地测试.jmx
   [jmeter] Starting the test @ Sun Apr 28 19:15:06 CST 2019 (1556450106344)
   [jmeter] Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump mes
e on port 4445
   [jmeter] summary =      1 in 00:00:02 =    0.4/s Avg:  1864 Min:  1864 Max
1864 Err:     0 (0.00%)
   [jmeter] Tidying up ...    @ Sun Apr 28 19:15:09 CST 2019 (1556450109627)
   [jmeter] ... end of run

_message_xalan:

xslt-report:
     [xslt] Processing D:\jmeterTest\resultLog\Test.jtl to D:\jmeterTest\resu
og\Test.html
     [xslt] Loading stylesheet D:\software\apache-jmeter-5.1\extras\jmeter-re
ts-detail-report_21.xsl

verify-images:

copy-images:
     [copy] Copying 1 file to D:\jmeterTest\resultLog
     [copy] Copying 1 file to D:\jmeterTest\resultLog

report:
     [echo] Report generated at 2019/04/28 19:15

all:

BUILD SUCCESSFUL
Total time: 13 seconds
运行信息

测试后

技术图片

浏览器打开HTML文件,显示正确

技术图片

打开jtl文件

技术图片

 

Ant+JMeter集成

标签:目录   run   ota   processor   display   force   ref   准备   实例   

原文地址:https://www.cnblogs.com/zhengna/p/10775321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!