jmeter+ant搭建使用学习记录
前提
1、jdk环境已经安装配置好的(我用的1.8.0_192);
2、jmeter已经安装配置好了(我用的5.4.1)。
3、\apache-jmeter-5.4.1\bin下jmeter.properties文件的配置:#jmeter.save.saveservice.output_format=csv
,
修改为jmeter.save.saveservice.output_format=xml
,用jmeter生成html报告时使用csv格式;用ant生成html报告时用xml格式
4、\apache-jmeter-5.4.1\bin下jmeter.properties文件的配置:
# The below properties are true when field should be saved; false otherwise
#
# assertion_results_failure_message only affects CSV output
jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitimate values: none, first, all
#jmeter.save.saveservice.assertion_results=none
#
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=true
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
#Only available with HttpClient4
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=true
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
jmeter.save.saveservice.sent_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
下载、配置ant
-
官网地址 :https://ant.apache.org/bindownload.cgi;
下载.zip包解压放到任意目录,我放在E:\autoTEST\apache-ant-1.9.16 -
给ant配置(和jmeter配置一样的):电脑的属性–>高级系统配置–>环境变量–>系统变量;
新建 变量名:ANT_HOME 变量值:E:\autoTEST\apache-ant-1.9.16
在CLASSPATH后面添加:%ANT_HOME%\lib;
在PATH后面增加1条:%ANT_HOME%\bin
-
验证ant安装配置成功没有:
win+R – cmd查看版本:ant -version
如果出现版本信息,说明安装成功:
Apache Ant™ version 1.9.16 compiled on July 10 2021
jmeter和ant关联配置
- 任意路径新建如下文件夹,方便我们查看,build.xml文件新建的:
- build.xml的配置,参考了网上的很多文章(感谢ღ( ´・ᴗ・` )比心),按我的需求改了下,贴一下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="all" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录 -->
<property name="jmeter.home" value="D:\Downloadsoftware\apache-jmeter-5.4.1" />
<property name="report.title" value="测试报告" />
<!-- jmeter生成jtl格式的结果报告的路径 -->
<property name="jmeter.result.jtl.dir" value="E:\ant_jmeter\JTL" />
<!-- jmeter生成html格式的结果报告的路径 -->
<property name="jmeter.result.html.dir" value="E:\ant_jmeter\HTML" />
<!-- zip文件路径 -->
<property name="zip.dir" value="E:\ant_jmeter" />
<!-- 生成的报告的前缀 -->
<property name="ReportName" value="测试报告前缀" />
<!-- 报告名称 -->
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
<!-- 报告模板 -->
<property name="jmeter.resultDetail.htmlName" value="${jmeter.result.html.dir}/${ReportName}Iterface-detail.html" />
<property name="zipname" value="${zip.dir}/${ReportName}${time}.zip" />
<!-- 邮件配置信息 -->
<!-- 按照自己用的邮箱填写 -->
<property name="mail_host" value="邮件服务器主机" />
<property name="mail_port" value="端口号" />
<property name="username" value="邮箱账号" />
<property name="password" value="pwd" />
<!-- 邮件发送人 -->
<property name="mail_from" value="发送人邮箱" />
<!-- 邮件接收人 -->
<property name="mail_to" value="接收人邮箱" />
<!-- 邮件抄送人 -->
<!-- <property name="mail_cc" value="抄送人邮箱" /> -->
<!-- 邮件主题 -->
<property name="mailsubject" value="${report.title},附件为自动化测试报告,如有问题,尽快与测试组联系!" />
<!-- 输出生成的报告名称和存放路径 -->
<echo message="${jmeter.result.jtlName}" />
<echo message="${jmeter.resultDetail.htmlName}" />
<echo message="${jmeter.result.html.dir}" />
<echo message="${zip.dir}" />
<echo message="${zipname}" />
<!-- 加载jar包,解决时间显示问题 -->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar" />
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar" />
</path>
<target name="all">
<antcall target="test" />
<antcall target="report" />
<antcall target="zip" />
<!-- 打包zip -->
<antcall target="sendEmail" />
<!-- 发送邮件 -->
</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 将需要执行的jmx写在includes中 -->
<testplans dir="E:\ant_jmeter\JMX" includes="*.jmx" />
<!-- 这里就是jmeter.properties修改的部分 -->
<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.resultDetail.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_30.xsl">
<param name="Date Report" 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>
<!-- zip配置 -->
<target name="zip">
<echo>
打包zip文件
</echo>
<zip destfile="${zipname}" duplicate="preserve">
<zipfileset dir="${jmeter.result.html.dir}" includes="**/*.*" prefix="测试报告" />
</zip>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${zip.dir}">
<include name="*.zip" />
</fileset>
</copy>
</target>
<!-- 配置发送邮件报告 -->
<target name="sendEmail">
<echo>
发送测试报告
</echo>
<loadfile property="email_content" srcFile="${jmeter.resultDetail.htmlName}" encoding="UTF-8" />
<!-- 抄送在mail标签里面写cclist="${mail_cc}" -->
<mail mailhost="${mail_host}" ssl="true" user="${username}" password="${password}" mailport="${mail_port}" subject="${mailsubject}" messagemimetype="text/html" messagefileinputencoding="UTF-8" tolist="${mail_to}" >
<from address="${mail_from}" />
<!-- 邮件的内容 -->
<message charset="UTF-8">
测试概要:
${email_content}
</message>
<!-- 附件 -->
<attachments>
<fileset dir="${jmeter.result.html.dir}">
<!-- 意思为该目录下的全部压缩包都作为邮件的附件 -->
<include name="*.zip" />
</fileset>
</attachments>
</mail>
</target>
</project>
-
将\apache-jmeter-5.4.1\extras下面的ant-jmeter-1.1.1的jar包到ant的lib目录
-
maven下载发邮件的3个依赖包
activation-1.1.1.jar:https://mvnrepository.com/artifact/javax.activation/activation
commons-email-1.5.jar:https://mvnrepository.com/artifact/org.apache.commons/commons-email
javax.mail-1.6.2.jar:https://mvnrepository.com/artifact/com.sun.mail/javax.mail
以下载activation-1.1.1.jar为例:
把3个包都放在\apache-ant-1.9.16\lib下面:
-
报告样式文件,我直接用的网上分享发的jmeter-results-detail-report_30.xsl,大家可以去下载,放到\apache-jmeter-5.4.1\extras目录下,贴上大佬链接:https://www.cnblogs.com/jaychang/p/5881525.html
运行一个.jmx试一下
放一个.jmx文件到JMX文件夹下:
在build.xml文件同路径下cmd:
我这里是E:\ant_jmeter下,ant命令回车,就开始执行:
如图就是构建成功:
查看报告
生成报告的位置都是在build.xml里面配置的,在相应的位置查看是否生成:
邮件也收到了:
遇到的问题
问题一:生成的报告左上角日期没有显示当前日期,显示的date not defined
报告是根据我们上面build.xml配置文件生成的,打开build.xml文件,找到日期相关的部分:
<param name="Date Report" expression="${report.datestamp}" />
而报告样式由"${jmeter.home}/extras/jmeter-results-detail-report_30.xsl"
这个样式表负责,所以再打开jmeter-results-detail-report_30.xsl这个文件,找到日期相关的部分,有两个地方:
<xsl:param name="dateReport" select="'date not defined'"/>
<td align="left">Date report: <xsl:value-of select="$dateReport" /></td>
找了下别的文章讲解,这个xsl文件中的<xsl:param 参数是要build.xml文件传给它的,也就是说参数名称要一致,所以把build.xml文件中改成:
<param name="dateReport" expression="${report.datestamp}" />
再生成报告看下,已经可以显示日期了:
问题二:概要报告太简单了,需要生成详细接口报告
1、下载详细接口报告样式,用的网上大佬的,也放到\apache-jmeter-5.4.1\extras目录下jmeter.results.shanhe.me.xsl
2、在build.xml文件里加上生成详细报告,在生成报告的<target里面加上以下代码:
<xslt classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.html.dir}/detail-report.html"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<!-- 这里是第三方模板,修改jmeter.properties后生成的报告有详细的请求、响应、错误信息等 -->
<param name="dateReport" expression="${report.datestamp}" />
</xslt>
至此,就可以实现jmeter+ant的自动执行、生成报告和发送邮件了,剩下的我用着有问题再补充吧~