1. 安装Ant,下载地址https://ant.apache.org/bindownload.cgi,配置环境变量
ANT_HOME D:\apache-ant-1.9.7
Path %ANT_HOME%\bin 或者填写绝对路径(最好系统变量和用户变量的path都填写,不然会出现ant命令不是内部或外部命令的提示)
Classpath %ANT_HOME%\lib 或者填写绝对路径
输入命令ant -version查看版本号
2. 配置ant的build.xml文件
ant的安装目录的bin目录下是没有build.xml文件的,需要自己手动添加,具体代码如下。
中文备注的地方需要自己注意下,有些需要自己改成自己的安装路径和自己需要的名称。
我是新建了一个resultlog文件夹,直接把生成的html和jtl文件放在了jenkins的workspace目录下,运行的脚本我放在了jmeter的bin目录下。
此处测试报告的名称我取的固定名称“TestReport”,有文章说这样每次都是最新的报告,我试了一下,其实不是的,每次生成的报告都会累积在同一个html文件内,观看不方便。解决方案写在文章最后。
<?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:\apache-jmeter-5.1.1" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\Jenkins\workspace\测试
\resultlog\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\Jenkins\workspace\测试
\resultlog\html" />
<!-- 生成的报告的前缀-->
<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" />
<property name="detail" value="_detail" />
<property name="jmeter.result.jtlNamedetail"
value="${jmeter.result.jtl.dir}/${ReportName}.jtl" />
<property name="jmeter.result.htmlNamedetail"
value="${jmeter.result.html.dir}/${ReportName}${detail}.html" />
<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:\apache-jmeter-5.1.1\bin\Test" 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"
/>
<xslt in="${jmeter.result.jtlNamedetail}"
out="${jmeter.result.htmlNamedetail}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" />
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝
-->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
控制台进入ant安装目录的bin目录下,输入命令ant,运行结束出现sucess字眼就配置成功了。去到自己建的resultlog文件夹中可以看到生成的html和jtl文件。
3. 报告优化
我这里放了两个测试报告模板,因为自带的21版本太过简洁,另一个版本的模板可百度下载,放在jmeter的extras文件夹下面,有很多资源。
进入jmeter的的bin目录下找到jmeter.properties文件,取消如下代码的注释,并且把状态改为true。
再次在控制台输入ant,resultlog里面的html文件会有两个。如下两张图。
4. 安装jenkins,下载地址https://jenkins.io/download/,进入到8080,如果端口被占用,进入jenkins安装目录找到jenkins.xml文件修改httpPort=8080的端口号即可。
5. 与jenkins集成
在Manage Jenkins中找到插件管理,安装HTML Publisher Plugin,这样在新建项目时,在构建后操作中可以增加构建后操作步骤Publish HTML reports
这样运行项目之后就会有HTML reports。
这时候报告会不显示CSS格式,解决方案:安装Groovy Plugin,在新建项目时,在构建中,新增构建步骤Execute system Groovy script,写入脚本System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; style-src 'self';")。
5. Jenkins配置自动发送邮件
开通邮箱的SMTP服务,一般在邮箱的设置里面,我开通的163,这时会有一个授权码(要记住,登录第三方邮箱都需要)。
安装Email Extension Plugin插件,进入系统管理--系统设置。
6.构建项目
新建一个自由风格的项目,在构建中,新建构建步骤Invoke Ant,点击高级,Build File中填入之前写的build.xml文件的绝对路径。
增加构建后步骤Editable Email Notification。
点击Addvanced Settings,这边改一下收件人,不然会收不到邮件。
邮件模板
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
本邮件由系统自动发出,无需回复!<br/>
各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br>
<td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>构建状态: ${BUILD_STATUS}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
</td>
</tr>
</table>
</body>
</html>
7. 解决邮件发送的附件每次都要保证是最新的html报告的问题
上面说到每次resultlog文件夹内都会生成以时间戳命名的html和jtl文件,或者像我build.xml文件那样,每次运行的结果都会累积在TestReport.html中,邮件接收者就会收到每次运行的结果,看起来很不方便。基于此,想到一个解决方案:
新建一个文本文档,文档内写入del D:\Jenkins\workspace\测试\resultlog\html\TestReport.html del D:\Jenkins\workspace\测试\resultlog\jtl\TestReport.jtl,这个意思就是删除每次生成的html和jtl文件。
将文件的后缀改为.bat
开始菜单--所有程序--附件--系统工具--任务计划程序,创建基本任务,设置为自己需要的参数,因为我的脚本是每周五跑一次,所以每周六删除生成的html和jtl文件即可,运行刚才的bat文件。这样每次生成的html文件就是只包含本次运行的结果。