一、JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.htmlphp
二、Jmeter:http://jmeter.apache.org/download_jmeter.cgihtml
三、Ant:http://ant.apache.org/bindownload.cgijava
四、Jenkins:http://jenkins-ci.org/node
具体可参见我另外一篇博客:http://www.cnblogs.com/puresoul/p/4808416.htmlexpress
2、Jemter脚本准备:apache
一、脚本目录:D:\B_TOOLS\apache-jmeter-2.13\demooracle
二、脚本内容:都是简单的访问百度或google首页post
baidu.jmx google.jmx测试
3、ANT的build.xml代码准备:优化
build3.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project name="ant-jmeter-test" default="run" basedir="."> 4 <tstamp> 5 <format property="time" pattern="yyyyMMddhhmm" /> 6 </tstamp> 7 8 <property environment="env"/> 9 <property name="ReportName" value="TestReport" /> 10 <!-- 须要改为本身本地的 Jmeter 目录--> 11 <property name="jmeter.home" value="D:\B_TOOLS\apache-jmeter-2.13" /> 12 <!-- jmeter生成jtl、html格式的结果报告的路径--> 13 <property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" /> 14 <!-- 生成的报告的前缀--> 15 <property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" /> 16 <property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" /> 17 18 <target name="run"> 19 <echo message="start..."/> 20 <antcall target="clean" /> 21 <antcall target="test" /> 22 <antcall target="report" /> 23 </target> 24 25 <target name="clean"> 26 <mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" /> 27 </target> 28 29 <target name="test"> 30 <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> 31 <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 32 <!-- 声明要运行的脚本"*.jmx"指包含此目录下的全部jmeter脚本--> 33 <testplans dir="D:\B_TOOLS\apache-jmeter-2.13\demo" includes="*.jmx" /> 34 35 <property name="jmeter.save.saveservice.output_format" value="xml"/> 36 </jmeter> 37 </target> 38 39 <target name="report"> 40 <xslt in="${jmeter.result.jtlName}" 41 out="${jmeter.result.htmlName}" 42 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /> 43 <!-- 由于上面生成报告的时候,不会将相关的图片也一块儿拷贝至目标目录,因此,须要手动拷贝 --> 44 <copy todir="${jmeter.result.dir}"> 45 <fileset dir="${jmeter.home}/extras"> 46 <include name="collapse.png" /> 47 <include name="expand.png" /> 48 </fileset> 49 </copy> 50 </target> 51 </project>
4、配置Jenkins Job并运行:
一、job配置以下:
二、job运行结果:
1 Started by user anonymous 2 Building in workspace D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace 3 [demo] $ cmd.exe /C '"ant.bat -file build3.xml run && exit %%ERRORLEVEL%%"' 4 Buildfile: build3.xml 5 6 run: 7 [echo] start... 8 9 clean: 10 [mkdir] Created dir: D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15 11 12 test: 13 [jmeter] Executing test plan: D:\B_TOOLS\apache-jmeter-2.13\demo\baidu.jmx ==> D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.jtl 14 [jmeter] Creating summariser <summary> 15 [jmeter] Created the tree successfully using D:\B_TOOLS\apache-jmeter-2.13\demo\baidu.jmx 16 [jmeter] Starting the test @ Tue Sep 22 15:50:33 CST 2015 (1442908233010) 17 [jmeter] Waiting for possible shutdown message on port 4445 18 [jmeter] summary + 1 in 1s = 2.0/s Avg: 254 Min: 254 Max: 254 Err: 0 (0.00%) Active: 1 Started: 1 Finished: 0 19 [jmeter] summary + 5 in 1s = 7.3/s Avg: 131 Min: 96 Max: 196 Err: 0 (0.00%) Active: 0 Started: 1 Finished: 1 20 [jmeter] summary = 6 in 1.2s = 5.0/s Avg: 151 Min: 96 Max: 254 Err: 0 (0.00%) 21 [jmeter] Tidying up ... @ Tue Sep 22 15:50:34 CST 2015 (1442908234310) 22 [jmeter] ... end of run 23 [jmeter] Executing test plan: D:\B_TOOLS\apache-jmeter-2.13\demo\google.jmx ==> D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.jtl 24 [jmeter] Creating summariser <summary> 25 [jmeter] Created the tree successfully using D:\B_TOOLS\apache-jmeter-2.13\demo\google.jmx 26 [jmeter] Starting the test @ Tue Sep 22 15:50:35 CST 2015 (1442908235240) 27 [jmeter] Waiting for possible shutdown message on port 4445 28 [jmeter] summary + 1 in 1s = 1.9/s Avg: 253 Min: 253 Max: 253 Err: 1 (100.00%) Active: 1 Started: 1 Finished: 0 29 [jmeter] summary + 5 in 1.1s = 4.4/s Avg: 209 Min: 97 Max: 420 Err: 0 (0.00%) Active: 0 Started: 1 Finished: 1 30 [jmeter] summary = 6 in 2s = 3.6/s Avg: 216 Min: 97 Max: 420 Err: 1 (16.67%) 31 [jmeter] Tidying up ... @ Tue Sep 22 15:50:36 CST 2015 (1442908236992) 32 [jmeter] ... end of run 33 34 report: 35 [xslt] Processing D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.jtl to D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.html 36 [xslt] Loading stylesheet D:\B_TOOLS\apache-jmeter-2.13\extras\jmeter-results-detail-report_21.xsl 37 [copy] Copying 2 files to D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15 38 39 BUILD SUCCESSFUL 40 Total time: 5 seconds 41 [workspace] $ cmd /c call D:\Users\heman793\AppData\Local\Temp\hudson4765606743104861298.bat 42 43 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace>echo D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace 44 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace 45 46 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace>echo 15 47 15 48 49 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace>cd results 50 51 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results>cd 15 52 53 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15>exit 0 54 Finished: SUCCESS
三、在job的workspace目录下会生成结果报告:
四、TestReport.html:
更新补充:
上面生成的报告有以下两个问题,解决办法参见Jmeter自带报告优化(一):
一、Date report这里的时间没有正确显示出来
二、Summary里的字段Min Time和Max Time显示的是NaN,没有显示正确的时间。
5、配置发送邮件功能
一、自已写一个发送邮件的功能并打成sendmail.jar包,放在job的workspace目录中
二、jenkins增长构建步骤
a)进入到测试报告的目录
b) 调用sendmail.jar命令发送邮件
说明:
一、由build3.xml的第十二、13行可知,报告文件生成目录为:${env.WORKSPACE}/results/${env.BUILD_ID},因此这里我要先cd到具体执行的那个build_id目录下。
二、咱们也能够把上面的两行命令写在成一个批处理文件,例如我第1步有个sendmail.bat文件就是的,而后调用时直接写sendmail.bat就行了。
另外,我本文全部脚本都在我本地,其实更好的办法是使用SVN统一管理,这里就不介绍了,感受的能够本身研究下。
做者:Glen.He
出处:http://www.cnblogs.com/puresoul/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。
1、本文目的:
以前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,可是最后生成的报告有一点小问题,虽然不影响使用,但老是感受不够完美,具体问题以下:
一、Date report这里的时间没有正确显示出来
二、Summary里的字段Min Time和Max Time显示的是NaN,没有显示正确的时间。
本文主要解决上述两个问题,具体报告如何生成可参考上面提到的两篇文章。
2、Jmeter+Ant报告生成原理:
在解决问题以前,让咱们先弄清楚Jmeter+Ant是生成报告的原理,知道原理后咱们就能够很从容的解决问题了。另外,若是后续咱们想定制报告也就很容易了。
一、在Jmeter的extras目录下,官方已经为咱们提供了一个现成的实例,咱们只须要在该目录下执行ant命令就能够生成一个数据文件Test.jtl和一个报告Test.html(PS:若是没有安装ant须要先去安装,不会用ant的自行百度)。
二、知道了上一步后,接下来咱们研究的重点就是extras目录下的build.xml文件了,具体研究细节就不在此细说了,由于这就部份内容属于ant的范围,有须要的能够自行补充下ant的知识。
3、解决问题:
一、找到extras目录下build.xml文件内容的以下部分:它的做用就是把生成的.jtl数据文件转换为.html格式的报告
具体属性的含义:
1 <path id="xslt.classpath">//jar的路径 2 <fileset dir="${lib.dir}" includes="xalan*.jar"/> 3 <fileset dir="${lib.dir}" includes="serializer*.jar"/> 4 </path> 5 //把生成的.jtl数据文件转换成.html格式的报告 6 <target name="xslt-report" depends="_message_xalan"> 7 <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp> 8 <xslt 9 classpathref="xslt.classpath" 10 force="true" 11 in="${testpath}/${test}.jtl" 12 out="${testpath}/${test}.html" 13 style="${basedir}/jmeter-results-detail-report${style_version}.xsl"> 14 <param name="showData" expression="${show-data}"/> 15 <param name="titleReport" expression="${report.title}"/> 16 <param name="dateReport" expression="${report.datestamp}"/> 17 </xslt> 18 </target>
二、经过上面的分析,style 文件是整成报告转换的关键,那咱们就打开jmeter-results-detail-report_21.xsl这个文件看看,找到以下几行,这里也定义了三个参数跟build.xml文件中同样,由此可猜想,咱们只要在build.xml文件中定义dateReport这个参数和值,在style中就能够按以下方式使用,通过测试证实猜想是正确的,那么第一个问题就解决了:
1 <xsl:param name="showData" select="'n'"/> 2 <xsl:param name="titleReport" select="'Load Test Results'"/> 3 <xsl:param name="dateReport" select="'date not defined'"/>
三、对于第二个问题,其实把第1步中的代码复制到咱们本身的build.xml文件中后,能够一并解决这两个问题。解决第二个老是的关键代码是第9行和第10行:
classpathref="xslt.classpath"
force="true"
而第9行又引用了第1~4行
四、到此,两个问题都解决了,最终修改后的build.xml文件以下,标黄是解决老是添加的代码:
<?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="run" basedir="."> <!-- 须要改为本身本地的 Jmeter 目录--> <property name="jmeter.home" value="/Users/Tools/Jmeter" /> <property name="report.title" value="接口测试"/> <!-- jmeter生成jtl格式的结果报告的路径--> <property name="jmeter.result.jtl.dir" value="/Users/Desktop/jmx/report" /> <!-- jmeter生成html格式的结果报告的路径--> <property name="jmeter.result.html.dir" value="/Users/Desktop/jmx/report" /> <!-- 生成的报告的前缀--> <property name="ReportName" value="TestReport" /> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" /> <target name="run"> <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="/Users/Desktop/jmx" includes="*.jmx" /> <property name="jmeter.save.saveservice.output_format" value="xml"/> </jmeter> </target> <path id="xslt.classpath"> <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> </path> <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> <!-- 由于上面生成报告的时候,不会将相关的图片也一块儿拷贝至目标目录,因此,须要手动拷贝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project>
五、修改后的报告:
做者:Glen.He
出处:http://www.cnblogs.com/puresoul/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。
Jmeter默认的报告展现的信息比较少,若是出错了,不是很方便定位问题。由Jmeter默认报告优化这篇文章可知,其实由.jtl格式转换为.html格式的报告过程当中,style文件起了很关键的做用。下面介绍另外一种style文件的使用方法:
一、下载style文件:jmeter.results.shanhe.me.xsl
二、把下载的文件放到jmeter的extras目录下。
三、修改jmeter.properties文件以下部分,我这里都修改为true,这样执行完脚本后就会保存这些结果到.jtl文件里面:
jmeter.save.saveservice.data_type=true jmeter.save.saveservice.label=true jmeter.save.saveservice.response_code=true # response_data is not currently supported for CSV output jmeter.save.saveservice.response_data=true # Save ResponseData for failed samples jmeter.save.saveservice.response_data.on_error=false jmeter.save.saveservice.response_message=true jmeter.save.saveservice.successful=true jmeter.save.saveservice.thread_name=true jmeter.save.saveservice.time=true jmeter.save.saveservice.subresults=true jmeter.save.saveservice.assertions=true jmeter.save.saveservice.latency=true jmeter.save.saveservice.connect_time=true jmeter.save.saveservice.samplerData=true jmeter.save.saveservice.responseHeaders=true jmeter.save.saveservice.requestHeaders=true jmeter.save.saveservice.encoding=false jmeter.save.saveservice.bytes=true jmeter.save.saveservice.url=true jmeter.save.saveservice.filename=true jmeter.save.saveservice.hostname=true jmeter.save.saveservice.thread_counts=true jmeter.save.saveservice.sample_count=true jmeter.save.saveservice.idle_time=true
四、修改build.xml文件,以下第7行style的值修改成新下载的xsl文件名:
1 <target name="report" depends="_message_xalan"> 2 <xslt 3 classpathref="xslt.classpath" 4 force="true" 5 in="${testpath}/${test}.jtl" 6 out="${testpath}/${test}.html" 7 style="${basedir}/jmeter-results-shanhe-me.xsl"> 8 <param name="showData" expression="${show-data}"/> 9 </xslt> 10 </target>
五、执行脚本,生成报告以下,明显感受展现的内容比以前的报告多不少,定位问题也比较方便直观:
参考:
https://testerhome.com/topics/3773
做者:Glen.He
出处:http://www.cnblogs.com/puresoul/ 本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。