Ant+JMeter集成
Posted zhengna
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ant+JMeter集成相关的知识,希望对你有一定的参考价值。
实例一(不推荐)
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>
%ANT_HOME%\\bin\\ant -f .\\build.xml
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集成的主要内容,如果未能解决你的问题,请参考以下文章
01 jenkins01 linux+jenkins+ant+jmeter集成