接口测试完成后生成测试报告的同时通过邮箱发送进行汇报接口测试结果,可以结合jenkins+ant+jmeter配置发送到指定邮箱来完成。
一、jenkins+ant+jmeter的配置
jenkins+ant+jmeter:https://www.cnblogs.com/lc-blogs/p/17006244.html
上篇jenkins+ant+jmeter的持续集成仅完成了生成测试报告,未集成发送到邮件的功能,此篇文章主要在原有的基础上加入了发送测试报告到邮箱的功能。
二、ant发送邮件的配置
- ant发送邮件需要依赖几个jar包才能完成发送邮件的功能
jar包:https://www.aliyundrive.com/s/KC3TqGACTZA 提取码: c9g5
**把三个jar包下载下来后放到ant的lib目录下
- 配置build.xml文件来完成发送邮件的功能,在原有的build.xml文件修改
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddHHmm" />
</tstamp>
<!-- 需要改成自己本地的Jmeter目录-->
<property name="jmeter.home" value="D:\apache-jmeter-5.3" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\acan\demo\report\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\acan\demo\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" />
<!-- 输出生成的报告名称和存放路径-->
<echo message="${jmeter.result.jtlName}"/>
<echo message="${jmeter.result.htmlName}"/>
<echo message="${jmeter.result.html.dir}"/>
<target name="run">
<!-- clear删除jtl和html历史文件,test根据jmx文件执行测试,report生成jtl和html文件,sendmail发送邮件-->
<antcall target="clear"/>
<antcall target="test"/>
<antcall target="report"/>
<antcall target="sendmail"/>
</target>
<!-- 指定ant-jmeter-1.1.1.jar 的位置 -->
<path id="jmeter.classpath">
<fileset dir="${jmeter.home}/extras">
<include name="ant-jmeter-1.1.1.jar"/>
</fileset>
</path>
<!--加载jar包,解决显示时间问题-->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本,比如test*.jmx表示以test开头的所有.jmx文件-->
<testplans dir="D:\acan\demo" includes="*.jmx" />
<!-- 声明ant执行jmeter时,传入jmeter的属性值,可以自定义必须是xml格式 -->
<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.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<!--jmeter-results-detail-report_21.xsl这里的文件名可以换成你想要的报告效果-->
<!--显示dateReport的时间-->
<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>
<target name="clear">
<!-- 每次执行前先删除清空jtl和html文件夹,释放空间 -->
<echo message="释放空间,清空jtl和html文件夹中..."></echo>
<delete dir="D:\acan\demo\report\html" />
<delete dir="D:\acan\demo\report\jtl" />
<!-- 删除单个文件-->
<delete file="D:\acan\demo\report\testreport.rar" />
<sleep seconds="2"/>
<echo message="释放完成 ..."></echo>
</target>
<target name="sendmail">
<!--把报告进行压缩打包-->
<jar jarfile="D:\acan\demo\report\testreport.rar" basedir="D:\acan\demo\report\html"/>
<!--把文件贴到邮件正文-->
<loadfile property="html" srcFile="${jmeter.result.htmlName}" encoding="UTF-8">
<filterchain>
<expandproperties />
</filterchain>
</loadfile>
<mail
mailhost="smtp.qq.com"
mailport="25"
subject="xxx项目接口测试报告"
messagemimetype="text/html"
tolist="接收邮箱地址"
user="发送邮箱地址"
password="邮箱授权码">
<from address="发送邮箱地址"/>
<!--发送附件,dir填写生成的压缩文件地址,name填写生成的压缩文件-->
<fileset dir="D:\acan\demo\report">
<include name="testreport.rar"/>
</fileset>
<message><![CDATA[
<p>xxx项目组收:</p>
<pre> ${html} </pre>
<p>自定义邮件内文字</p>
]]>
</message>
</mail>
</target>
</project>
1)在原来的build.xml文件中新加入了clear和sendmail方法
clear方法用来清除历史的html和jtl文件
sendmail方法通过邮件发送测试报告
注:clear方法要写在最前,先清除历史数据再执行测试,如果写在下方会把所有执行测试生成的数据全部删除,sendmail方法放到最后
①以下是删除历史的html和jtl文件的脚本
②以下是发送邮件部分的脚本
邮箱授权码参考:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
完整的build.xml文档
三、执行ant命令发送邮件
在创建的存放测试报告和jmx文件的路径打开cmd窗口
见到如下图,BUILD SUCCESSFUL表示成功
收到的邮件,如下图
四、jenkins构建结果
使用ant执行能够正常收到邮件,jenkins不需要做任何的修改,直接构建
jenkins的控制台查看构建结果