最近几天尝试使用Ant+Jmeter+Jenkins来进行Jmeter接口的批量执行并生成测试报告,目标明确,实践的路上各种问题杀出来,现在细想来梳理一下。
一、关于Ant、Jmeter、Jenkins的下载安装以及环境配置略过。
二、各种环境配置好以后,我将工作分为以下几个步骤:
1、 通过Jmeter来配置好需要测试的接口,并保存响应的接口文件*.jmx,例如我就在D盘单独建了一个文件,用来保存(文件夹名称最好不要有中文);
2、确保上述接口都可以在Jmeter中正常运行,效果如下图;
3、通过Ant来执行上述保存的接口文档,此处需要配置一个build.xml文件,然后首先通过cmd命令窗口,进入到build.xml所在的文件夹,通过命令行ant来执行,如下图所示。
此处附上我使用的build.xml的配置文件
<?xml version="1.0" encoding="utf-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmmss" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="D:\software\jmeter\apache-jmeter-3.2" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value=".\report\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value=".\report\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= "youremail@xxx.com"/>
<target name="run">
<antcall target="test" />
<antcall target="report" />
<!--antcall target="sendMail"/-->
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本此处我才用了相对路径,为后面通过Git来统一管理代码做铺垫-->
<testplans dir=".\" includes="*.jmx" />
<!--<property name="jmeter.save.saveservice.output_format" value="xml"/> -->
</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>
<target name = "sendMail">
<mail mailhost = "smtp.163.com" mailport= "25" user = "youremail@xxx.com" password = "xxxx" ssl = "false" subject = "InterfaceTest Report!" messagemimetype = "text/html" tolist = "${mail_to}" >
<from address = "youremail@xxx.com"/>
<fileset dir = "${jmeter.result.html.dir}"/>
<!--include name = "${ReportName}${Time}.html"/-->
<message>This email was sent automatically by ANT. <br/>
Please check the automation test report by the link below. <br />
If there are any questions, please contact with Bodhi Zhang. Thank you!<br /><br />
</message>
</mail>
</target>
</project>
注意:
I、在运行ant时会报错,如果是从网上down的build.xml文件,此时需要确保的是build.xml文件编码为UTF-8,且文件内没有多余的乱码字符(可以通过notepad++打开build.xml文件,使用ansi编码方式编码,查看该文件中没有没有被注释掉的乱码字符,如果有删掉即可)
II、build.xml的邮箱的配置需要确保发送邮件的邮箱的smtp已开启,否则执行发送邮件时会报很多530,533等授权问题,如果采用公司邮箱,一般该功能是不开启的,具体操作可以询问公司的IT服务。
4、通过cmd执行ant成功后,就可以在Jenkins中配置ant,通过Jenkins自动构建执行了。
5、可以额外配置HTML report来查看执行报告,并且通过发送邮件来通知,具体可查阅相关文档。
注意:
I、如果通过Jenkins自动发送测试报告邮件,需要安装Email相关插件,并且配置的发送邮箱也需要开启smtp,我的配置如下,smtp的Server可以先通过配置自己已开启smtp的qq邮箱或者163邮箱来测试;
II、另外,邮件发送成功还需要配置系统管理员的邮件,该邮件地址需要和发送的邮件相同
6、上述都完成后,就可以通过Jenkins自动构建,实现接口批量执行,并生成报告发送邮件了。