1.前提条件
本次环境搭建记录针对于mac环境。
本次JMeter+ant+git+jenkins在已搭建好java、Jmeter、ant环境的基础上进行配置。环境配置如下:
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home
export JAVA_HOME=$JAVA_8_HOME
export PATH=$JAVA_HOME/bin:$PATH:.
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JMETER_HOME=/Users/cady/apache-jmeter-4.0
export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar
export ANT_HOME=/Users/cady/apache-ant-1.10.7
export PATH=$PATH:.:${ANT_HOME}/bin
2.JMeter+ant+git
2.1 1.将 /Users/cady/apache-jmeter-4.0/extras文件夹下的ant-jmeter-1.1.1.jar这个jar包复制到 /Users/cady/apache-ant-1.10.7/lib文件夹下
复制:
黏贴至:
2.2 build.xml文件修改
1.配置和文件生成目录等相关修改(红框)
2.初始化方法(蓝框,不是必须)
3.git脚本文件路径(橙框):路径只需要写对于项目工作目录的相对路径即可
整个build.xml文档如下,供参考
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<!-- <format property="time" pattern="yyyy-MM-dd-HH-mm-ss" /> -->
</tstamp>
<!--<property name="testpath" value="${user.dir}"/> --><!-- jmeter的存放路径-->
<property name="jmeter.home" value="/Users/cady/apache-jmeter-4.0"/>
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="./TestReport/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="./TestReport/html" />
<!-- 生成的报告的前缀-->
<!-- <param name="time" expression="${ReportTime}"/> -->
<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" />
<!-- 输出生成的报告名称和存放路径-->
<echo message="${jmeter.result.jtlName}"/>
<echo message="${jmeter.result.htmlName}"/>
<echo message="${jmeter.result.html.dir}"/>
<target name="run">
<antcall target="init" />
<antcall target="test"/>
<antcall target="report"/>
</target>
<!--加载jar包,解决显示时间问题 -->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="init">
<mkdir dir="${jmeter.result.jtl.dir}" />
<mkdir dir="${jmeter.result.html.dir}" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!--添加Git后,修改路径,默认运行的脚本从Jenkins的workspace根目录拉取-->
<testplans dir="./" includes="*.jmx" />
<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">
<!--显示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>
</project>
3.JMeter+ant+git+Jenkins
3.1 项目 -- 配置 -- 源码管理 -- git 配置git仓库url和添加账户密码
3.2 Jenkins -- Manage Jenkins -- global tool configuration
配置jdk和ant
3.3 项目 -- 配置 -- 构建环境 -- with ant 配置选择3.1配置的环境
*3.2和3.3 这两步在windows上没有配置也可以运行,但是在mac上好像是一定要设置 不然报错:
ERROR: command execution failed.Maybe you need to configure the job to choose one of your Ant installations? Finished: FAILURE
3.4 在Jenkins用户中配置环境变量
这一步参考:https://blog.csdn.net/qq_23114525/article/details/83110145
没有配置这一步可能会导致控制台报错:you must set jemeterhome to your jmeter install directory
*这一步windows应该也不需要配置,但mac会出现问题
*3.5 在JMeter的lib目录下添加脚本相关jar包和安装相关插件
*这一步如果是本地搭建的话基本不需要,因为肯定之前都加过了。但如果是给公司项目搭建的话,是相对于比较干净的环境,所以需要检查一下脚本相关需要用到的jar包(比如连接数据库、websocket等),添加一下。
比如没有连接数据库相关jar包可能会导致控制台报错:Cannot load JDBC driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
3.6 项目 -- 配置 -- 构建
在构建中添加“Invoke Ant” 选择对应的ant环境并填写targets(这里的target如果不填写就是脚本中默认target);这里的任务都是按照顺序执行的,如果要在构建中添加其他任务或脚本等,只需要按照执行顺序摆放就可以了。
比如在图中,我在ant构建之前先使用脚本删除之前的报告,在ant构建后加上测试报告的失败断言判断,关联构建结果。
3.7 项目 -- 配置 -- 构建后操作 添加publish html reports(需要先安装该插件)
这样配置后,在item执行完后就可以在jenkins上看到测试报告的入口了
入口效果:
3.8 项目 -- 配置 -- 构建后操作 添加groovy postbuild(需要先安装该插件)
在3.7步骤完成后会发现报告的样式出现问题,所以要在3.7:publish html reports前,在添加一个构建后操作“groovy postbuild”,同样也需要先安装插件
*除了groovy postbuild还有两种解决方法,我在本地jenkins上测试可行,参考地址:https://www.cnblogs.com/yoyoketang/p/7518351.html,但因为我不清楚公司电脑上是怎么搭建jenkins的,所以使用了groovy postbuild这个方法。
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
到这步,整个jmeter+ant+git+jenkin就配置完毕了,接下来,如果需要配置邮件发送,还需要如下配置。
4.邮件配置
4.1 Jenkins -- Manage Jenkins -- configure system配置邮箱基本配置
以下是QQ邮箱的配置方法,需要注意:这里的密码不是QQ邮箱的密码,是你邮箱的授权码。配置完毕后,点击“通过发送测试邮件测试配置” 发一封邮件给自己,看一下配置是否有问题。
如何获得授权码:
登录QQ邮箱-设置-账户,先开启IMAP/SMTP服务,再点击下面温馨提示里的【生成授权码】获得这个密码
4.2 Jenkins -- Manage Jenkins -- Extended E-mail Notification配置
在4.1没有邮件发送没有问题后,将基本配置信息复制到Extended E-mail Notification相同的选项里,这里的配置都是和刚刚一样的;Default Recipients中配置默认收件人的邮箱地址。
下面的一些配置不需要改动,在这个配置的最右下角有一个【default trigger】按钮,点开可以对触发条件进行配置。
4.3 项目 -- 配置 -- 构建后操作 添加 Editable Email Notification(需要先安装插件)
1.Content Type 选择 “HTML”
2.Default Content 填入报告模版
3.Attachments 可填入报告路径(选填)
在右下角点击【Advanced Settings】
确认该项目的触发条件和对应发送的人!这里有个坑,当失败的时候他会默认发送给开发者列表,但一般我们刚配置的时候里面可能还没有人,所以会收不到邮件,控制台log:An attempt to send an e-mail to empty list of recipients, ignored.
所以Send To请手动加上“Recipient List”项。
HTML报告模版 供参考(“构建概览信息”中包含了正则匹配,不需要请删除):
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${PROJECT_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>
<td>(本邮件是程序自动下发的,请勿回复!)<br/></td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></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>构建日志: <a href=" ">${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>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a ></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
<tr>
<td> <hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建情况总览:</font></b>${TEST_COUNTS,var="fail"}<br/>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG_REGEX, regex="Executing test plan(.*?)jtl|summary (.*)" }</textarea>
</td>
</tr>
</table>
</body>
</html>
以上是Jenkins所有配置过程,希望能够对有需要的人有所帮助。